RecyclerView с EditTexts - добавление новых строк

У меня есть представление ресайклера, которое представляет собой просто список строк. Каждая строка содержит два текста редактирования. У меня есть кнопка, которая при нажатии должна добавлять новую строку под последней строкой и при этом сохранять все заполненные EditTexts. По какой-то причине я получаю очень случайное поведение при добавлении этих строк при нажатии моей кнопки.

Код ниже:

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);
     }
}

проверьте это stackoverflow.com/questions/47975286/… и это stackoverflow.com/questions/51454613/…

AskNilesh 27.11.2018 11:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
76
0

Другие вопросы по теме