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

How differentiate between user input and setText method in TextWatcher?

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

我在 ViewHolder 构造函数中的这个 EditText 中添加了一个 TextWatcher。此文本观察器调用:adapter.notifyItemChanged()

绑定视图时,我这样做:

edittext.setText("value");

所以文本更改事件被触发,但我不想要那个,因为我得到了

java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling

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

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

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

之后

无需在 ViewHolder 构造函数中设置 TextWatcher,您可以在调用 setText() 后立即绑定视图时执行此操作,从而避免您遇到的问题。

所以:

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

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