我如何避免这样的代码行:
((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!)的情况下注意到的那样。
我不是在寻找“如果你好,什么都不做”之类的解决方法...
最佳答案
AutoCompleteTextView的来源显示,他们设置了一个 bool 值以表示文本已被块完成替换
mBlockCompletion = true;
replaceText(convertSelectionToString(selectedItem));
mBlockCompletion = false;
这是实现您想要做的任何事情的一种好方法。
然后,TextWatcher检查以查看setText是否通过补全到达,并从方法中返回
void doBeforeTextChanged() {
if (mBlockCompletion) return;
添加和删除TextWatcher对于该应用程序将更加耗时