1

I have a recycler view which is just a list of rows. Each row contains two edit texts. I have a button that when clicked should add a new row underneath the last row and still keep all the EditTexts that have been filled out. For some reason I am getting some very random behaviour of where these rows are being added when my button is clicked.

Code below:

Adapter.class:

package b.calvin.com.evaccheck;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class PersonAdapter extends    
RecyclerView.Adapter<PersonAdapter.PersonViewHolder>{

private Context mCtx;
private List<String> peopleNames;
private List<String> peoplePhones;

public PersonAdapter(Context mCtx, List<String> peopleNames, List<String> peoplePhones) {
    this.mCtx = mCtx;
    this.peopleNames = peopleNames;
    this.peoplePhones = peoplePhones;
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(mCtx);
    View view = inflater.inflate(R.layout.row_addpersonnew,null);
    PersonViewHolder holder = new PersonViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(PersonViewHolder holder, int position) {
    holder.personsName.setTag(R.id.personNameEditText, position);
      String person = peopleNames.get(position);
      if(!person.equals("HOLDER")){
          holder.personsName.setText(peopleNames.get(position));
      }
}

@Override
public int getItemCount() {
    return peopleNames.size();
}

class PersonViewHolder extends RecyclerView.ViewHolder{

    EditText personsName;
    EditText personsContact;

    public PersonViewHolder(View itemView) {
        super(itemView);
        personsName = itemView.findViewById(R.id.personNameEditText);
        personsContact = itemView.findViewById(R.id.personPhoneNoEditText);

        personsName.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) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                int position = (int) personsName.getTag(R.id.personNameEditText);
                peopleNames.set(getAdapterPosition(),personsName.getText().toString());
                System.out.println(peopleNames.get(getAdapterPosition()));
            }
        });


    }
}

}

AddPeopleNewProcedureActivity.class:

package b.calvin.com.evaccheck;



public class AddPeopleNewProcedureActivity extends AppCompatActivity {


private FloatingActionButton fab;
private EditText personsNameET;
private EditText personsPhoneET;
private RecyclerView recyclerView;
private PersonAdapter personAdapter;
private List<String> peopleNames;
private List<String> peoplePhones;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addpeoplenew_activity);

    setupActivityReferences();
    setupClickListeners();

}

private void setupClickListeners() {
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        peopleNames.add("HOLDER");
        personAdapter.notifyDataSetChanged();
        }
    });
}



private void setupActivityReferences() {
    fab = findViewById(R.id.fabAddPerson);
    peopleNames = new ArrayList<String>();
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    peopleNames.add("HOLDER");

    personAdapter = new PersonAdapter(this,peopleNames,peoplePhones);
    recyclerView.setAdapter(personAdapter);
     }
}
  • check this https://stackoverflow.com/questions/47975286/dynamic-form-with-repeating-form and this https://stackoverflow.com/questions/51454613/how-can-i-validate-recyclerview-adapter-textinputedittext-from-fragment/51454770#51454770 – AskNilesh Nov 27 '18 at 10:02

0 Answers0