android - 如何避免在 Android EditText 中执行 onTextChanged

标签 android android-edittext

我怎样才能避免这样的代码行:

((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 值来表示文本正在被 block 完成替换

         mBlockCompletion = true;
         replaceText(convertSelectionToString(selectedItem));
         mBlockCompletion = false;    

这是实现您想要做的任何事情的好方法。 TextWatcher然后检查 setText 是否通过完成来完成并从方法中返回

 void doBeforeTextChanged() {
     if (mBlockCompletion) return;

添加和删除 TextWatcher 对应用程序来说会更耗时

关于android - 如何避免在 Android EditText 中执行 onTextChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802277/

相关文章:

java - 添加 Firestore 时出现重复类

android - '安卓 :hint' increases height of edittext and never resizes to entered text

php - 实现网页与android的聊天

android - RecyclerView 中的 YouTubePlayerFragment

android - 通过代码获取所有Android Lollipop通知

android - 在移动到另一个 Activity 之前需要 editText 字段

android - ListView 中的 EditText 焦点

android - 滚动时焦点随机跳跃

java - 如何将剪贴板中的文本发送到EditText框

android - 如何更新谷歌服务插件?