Редактирование текстового средства просмотра текста для всех редактируемых текстов в просмотре списка - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть список, который содержит editext для каждой позиции.Я назначил текстовый наблюдатель для каждого текста редактирования, как показано ниже:

holder.prodQuantity.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void afterTextChanged(Editable s) {
        if(isDialog) {
            recallMap.put(productId, s.toString());
        }
    }

Проблема в том, что всякий раз, когда я добавляю значение к первому тексту редактирования, средство просмотра текста запускается для всех элементов списка.recallMap должен содержать только идентификатор выбранной строки и значение, введенное в тексте редактирования этой строки, но в этом случае recalMap имеет все идентификаторы и значение, введенное в первый текст редактирования для всех.Обратите внимание, что это происходит без прокрутки.Любая помощь приветствуется.Спасибо.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Перед добавлением textChangedListner в адаптер сначала удалите уже добавленный textChangedListener в этот EditText. Нравится

 holder.prodQuantity.removeTextChangedListener(textWatcher);
 // obviously you also need to maintain TextWatchers ArrayList associated with each EditText.
// Or instead of maintaining a separate ArrayList for TextWatcher, you can implement in your Data Model Class.

Тогда ваш код ниже

  holder.prodQuantity.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

@Override
public void afterTextChanged(Editable s) {
    if(isDialog) {
        recallMap.put(productId, s.toString());
    }
}
0 голосов
/ 09 апреля 2019

Используйте этот пользовательский класс

public class MyCustomEditTextListener implements TextWatcher {
        private int position;

        public void updatePosition(int position) {
            this.position = position;
        }

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        }

        @Override
        public void afterTextChanged(Editable editable) {
           //your edittext text is here
        }
    }

 @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout, parent, false);
        return new ViewHolder(v, new MyCustomEditTextListener(), this);
    }

назначить слушателя для текста редактирования

edittext.addTextChangedListener(myCustomEditTextListener);

обновить позицию списка

@Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            holder.myCustomEditTextListener.updatePosition(position);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...