最新消息:

EditText在TextWatcher调用setText()导致监听器循环触发

android 大步 618浏览 0评论

 

 

当我们给EditText设置TextWather的时候,如果在onTextChanged或afterTextChanged中调用EditText的setText()方法,则会导致TextWather中的方法被循环调用。

解决办法:
在调用setText()方法之前调用removeTextChangedListener()。
下面这个实例:
情景描述:有两个EditText,互相监听对方的输入,以此来触发对方的监听器。

先定义实例变量:

然后设置:

 

 

思考:但是我的问题只是一个EditText,如果使用removeTextChangedListener方法,则后面就无法监听text改变了。所以,我们需要在setText()之后再次为EditText调用addTextChangedListener()方法。注意:必须将TextWather设置为实例变量。

不过对于单独的EditText,在TextWather中调用自身的setText()并没有任何实际意义,除非还有什么下拉菜单之类的,所以还是建议不要在TextWather中调用setText()。
我们也可以添加一个判断,根据是否是用户手动输入来改变文本,以此决定是否触发TextWather:

 

参考自:http://stackoverflow.com/questions/9385081/how-can-i-change-the-edittext-text-without-triggering-the-text-watcher

 

 

 

转载请注明:大步's Blog » EditText在TextWatcher调用setText()导致监听器循环触发

SiteMap