2014-01-11 186 views
0

我在onItemSelect中有一些代码,它修改了EditText,但在此之前我删除了它的TextWatcher。无论在修改EditText之后立即调用afterTextChanged方法。我的方法是这样的: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; 
     } 
    } 

我怎样才能真正删除听众?如果我不删除它,那么这个事情会自动调用更多次。

回答

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; 
     ... 
    } 

    ... 
} 
相关问题