如何区分TextWatcher中的用户输入和setText方法?

时间:2015-10-27 15:15:21

标签: android android-recyclerview android-adapter

我使用的RecyclerView包含每个包含EditText的项目。

我在ViewHolder构造函数的EditText中添加了TextWatcher。此文本观察者呼叫:adapter.notifyItemChanged()

绑定视图时,我这样做:

edittext.setText("value");

因此,文字更改事件被解雇了,但我不想要我得到

  

java.lang.IllegalStateException:无法调用此方法   RecyclerView正在计算布局或滚动

我希望只有当用户手动更改文本时才会触发该事件。有没有办法区分这些事件?

我可以删除并在每次视图绑定时再次添加TextWatcher,但我想找到另一个更好的解决方案。

2 个答案:

答案 0 :(得分:3)

您可以在setText()调用之后立即绑定视图,而不是在ViewHolder构造函数中设置TextWatcher,从而避免遇到您遇到的问题。

所以:

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

这样TextWatcher不会立即触发事件,因为在设置初始值时它还不存在。

答案 1 :(得分:1)

尝试在editext.setText(" value")之后的绑定方法中附加文本观察器