Я использую RecyclerView, который содержит элементы, каждый из которых содержит EditText.

Я добавляю TextWatcher в этот EditText в конструкторе ViewHolder. Этот вызов наблюдателя за текстом: adapter.notifyItemChanged()

При связывании просмотров я делаю:

edittext.setText("value");

Итак, событие с измененным текстом запускается, но я не хочу этого, потому что получаю

java.lang.IllegalStateException: невозможно вызвать этот метод, пока RecyclerView вычисляет макет или прокручивает

Я хочу, чтобы это событие запускалось только тогда, когда пользователь изменяет текст вручную. Есть ли способ отличить эти события?

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

3
Héctor 27 Окт 2015 в 18:15

2 ответа

Лучший ответ

Вместо того, чтобы устанавливать TextWatcher в конструкторе ViewHolder, вы можете сделать это во время привязки представления сразу после вызова setText (), избегая возникшей проблемы.

Так:

edittext.setText("value");
edittext.setTextWatcher(new TextWatcher(..

Таким образом, TextWatcher не будет сразу запускать событие, потому что оно еще не существовало, когда было установлено начальное значение.

3
Tim 27 Окт 2015 в 15:21

Попробуйте прикрепить наблюдатель текста в методе привязки сразу после edittext.setText ("value")

1
Antonio Cappiello 27 Окт 2015 в 15:20