Forma dinámica con forma repetitiva

Me gustaría crear una página en Android que debe tener un formulario que se repetirá en función de algún valor de forma dinámica .

Algo como esto:

enter image description here

Aquí los campos de nombre de usuario, contraseña, móvil y dirección se repiten en función del número de usuario ingresado en la página anterior. En esta imagen, la forma se repite dos veces, pero podría ser cualquier cantidad de veces que sea dinámica.

¿Cómo puedo lograr algo como esto? ¿Puedo usar listview o recyclerview ? Si es así, ¿cómo tendré que recuperar los valores ingresados?

Aquí los campos de nombre de usuario, contraseña, móvil y dirección se repiten en función del número de usuario ingresado en la página anterior. En esta imagen, la forma se repite dos veces, pero podría ser cualquier cantidad de veces que sea dinámica

ANS: deberías ir con recyclerview

¿Cómo puedo lograr algo como esto?

Cree un diseño como ese para recyclerview solo elemento

¿cómo tendré que recuperar los valores ingresados?

Puede obtener valores de la clase RecyclerView.Adapter

HERE IS THE SAMPLE CODE

Activity.java

 public class AddmoreActivity extends AppCompatActivity { RecyclerView myRc; ArrayList arrayList = new ArrayList<>(); Button btnGetData; AddMoreAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_addmore); myRc = (RecyclerView) findViewById(R.id.myRc); btnGetData = (Button) findViewById(R.id.btnGetData); myRc.setHasFixedSize(true); myRc.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); AddMorePojo addMorePojo = new AddMorePojo(); addMorePojo.setAddress(""); addMorePojo.setUserName(""); arrayList.add(addMorePojo); adapter = new AddMoreAdapter(this, arrayList); myRc.setAdapter(adapter); btnGetData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ArrayList pojoArrayList = adapter.getArrayList(); for (int i = 0; i < pojoArrayList.size(); i++) { Log.e("Name " + i, pojoArrayList.get(i).getUserName() + ""); Log.e("Pass " + i, pojoArrayList.get(i).getPass() + ""); Log.e("PHONE " + i, pojoArrayList.get(i).getPhone() + ""); Log.e("Address " + i, pojoArrayList.get(i).getAddress() + ""); } } }); } } 

Activity.xml

      

clase Pojo

 public class AddMorePojo { String userName, phone, pass, Address; public AddMorePojo() { } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getAddress() { return Address; } public void setAddress(String address) { Address = address; } } 

clase de adaptador

 public class AddMoreAdapter extends RecyclerView.Adapter { Context context; ArrayList arrayList; public AddMoreAdapter(Context context, ArrayList arrayList) { this.context = context; this.arrayList = arrayList; } @Override public AddMoreAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.addmorelayout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(AddMoreAdapter.ViewHolder holder, int position) { } @Override public int getItemCount() { return arrayList.size(); } public ArrayList getArrayList() { return arrayList; } public class ViewHolder extends RecyclerView.ViewHolder { EditText edtName, edtPhone, edtPass, edtAdrress; public ViewHolder(View itemView) { super(itemView); edtName = itemView.findViewById(R.id.edtUname); edtPhone = itemView.findViewById(R.id.edtPhone); edtPass = itemView.findViewById(R.id.edtPass); edtAdrress = itemView.findViewById(R.id.edtAddress); edtName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { AddMorePojo addMorePOJO = arrayList.get(getAdapterPosition()); addMorePOJO.setUserName(charSequence + ""); arrayList.set(getAdapterPosition(), addMorePOJO); } @Override public void afterTextChanged(Editable editable) { } }); edtPhone.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { AddMorePojo addMorePOJO = arrayList.get(getAdapterPosition()); addMorePOJO.setPhone(charSequence + ""); arrayList.set(getAdapterPosition(), addMorePOJO); } @Override public void afterTextChanged(Editable editable) { } }); edtPass.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { AddMorePojo addMorePOJO = arrayList.get(getAdapterPosition()); addMorePOJO.setPass(charSequence + ""); arrayList.set(getAdapterPosition(), addMorePOJO); } @Override public void afterTextChanged(Editable editable) { } }); edtAdrress.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { AddMorePojo addMorePOJO = arrayList.get(getAdapterPosition()); addMorePOJO.setAddress(charSequence + ""); arrayList.set(getAdapterPosition(), addMorePOJO); } @Override public void afterTextChanged(Editable editable) { } }); } } } 

diseño personalizado del adaptador