我如何避免这样的代码行:

((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对于该应用程序将更加耗时

10-07 21:03