【发布时间】:2012-09-29 22:00:21
【问题描述】:
我怎样才能避免这样的代码行:
((EditText) findViewById(R.id.MyEditText)).setText("Hello");
将在此处引发事件:
((EditText) findViewById(R.id.MyEditText)).addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
// HERE
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
我想知道是否有任何方法可以抑制 onTextChanged 的执行,正如我在选择 AutoCompleteTextView 的下拉结果的情况下注意到的那样(没有执行 onTextChanged!)。
我不是在寻找诸如“如果你好,什么都不做”之类的解决方法......
【问题讨论】:
-
设置文本将触发该侦听器。一种简单的方法是引用
TextWatcher,在设置文本之前删除监听器(使用removeTextChangedListener(watcher)),设置文本,重新启用监听器(使用addTextChangedListener(watcher))。如果您多次执行此操作,则可以使用一种方便的方法。 -
通过侦听器stackoverflow.com/a/15523518/2162226更新复选框解决了相同问题的示例