删除监听器后甚至调用AfterTextChanged

时间:2014-01-11 21:14:15

标签: android android-edittext textwatcher

我在onItemSelect中有一些代码修改了EditText,但在此之前我删除了TextWatcher。无论如何,在我修改EditText后立即调用afterTextChanged方法。我的方法是这样的:

   public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
      switch (adapterView.getId()) {
          case R.id.someId:
            // Remove the listener 
            // make changes to the EditText
            // add the listener 

            break;
      }
  }

我如何真正删除听众?如果我不删除它,那就是自己多次调用它。

1 个答案:

答案 0 :(得分:2)

解决方案是通知您TextWatcher您将以编程方式修改文本。在编辑文本(而不是删除侦听器)之前设置此标志(称之为enabled)并在完成修改时重置它。在TextWatcher中,检查是否设置了此标志,如果是,则忽略任何更改。

class MyTextWatcher extends TextWatcher {

    boolean mIsEnabled = true;

    public void setEnabled(boolean enabled) {
        mIsEnabled = enabled;
    }

    @Override
    protected afterTextChanged(Editable s) {
        if (!enabled) return;
        ...
    }

    ...
}