RecyclerView .addTextChangedListener дает несколько позиций

Ваша проблема вызвана порядком загрузки required property. Maven загружает каждый пользовательский required property в алфавитном порядке. Вероятно, вы не можете его изменить. Но есть два способа решения вашей проблемы:

  1. Переименование переменных ur, как это: "0_name" "1_groupId" Теперь он сначала спросит вас о имени.
  2. Используйте полная команда maven, передающая только параметр имени mvn archetype:generate -DarchetypeGroupId=?? -DarchetypeArtifactId=?? -DgroupId=?? -DartifactId=?? -Dversion=?? -Dpackage=?? -Dname=?? Замените ?? на допустимые параметры

Надеюсь, это вам поможет.

EDIT: теперь я вижу asked time. Довольно оффтоп, но, возможно, это поможет кому-то еще

-1
задан qwerty 17 January 2019 в 11:15
поделиться

1 ответ

Это происходит потому, что вы добавляете новый TextWatcher каждый раз, когда ваш ViewHolder связан с представлением. RecyclerView правильно перерабатывает ViewHolders, поэтому, когда он использует уже созданный, он просто добавляет новый TextWatcher.

Вы можете изменить способ использования этого, зарегистрировав TextWatcher при создании ViewHolder, чтобы вам не приходилось иметь дело с непрерывными привязками слушателя. Итак, в вашем конструкторе ViewHolder после привязки вашего EditText вы можете добавить TextWatcher, например, так:

this.etName = root.findViewById(R.id.yourEtID); // I'm sure you're doing something very similar to this in your VH's constructor
this.etName.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) {
            System.out.println(etName.getTag());
        }
    });

Вы заметите, что на этот раз я использовал etName.getTag () для чтения позиция. Это очень полезно, потому что теперь вы можете просто изменить свой onBindViewHolder, чтобы он выглядел так:

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
    holder.etName.setTag(position);
}

Просто не стесняйтесь спрашивать, если что-то неясно.

0
ответ дан Gregorio Palamà 17 January 2019 в 11:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: