2014-01-11 114 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; 
     ... 
    } 

    ... 
} 
相關問題