2017-09-26 122 views
0

我想在EditText上添加一些TextWatchers,但我应该在需要时删除它们。从EditText删除所有TextWatchers

... 

@BindView(R.id.widget_search_edittext) 
MaterialEditText mEditText; 

private List<TextWatcher> textWatcherList; 

... 

public void addTextChangedListener(TextWatcher watcher) { 
    textWatcherList.add(watcher); 
    mEditText.addTextChangedListener(watcher); 
} 

public void removeAllTextChangedListeners() { 
    for (TextWatcher watcher : textWatcherList) { 
     mEditText.removeTextChangedListener(watcher); 
    } 
    textWatcherList.clear(); 
}  

但这并没有工作,任何ideias?

回答

1

请确保在扩展的TextWather类中覆盖equals()。因为通过调用依赖于equals函数的arraylist.indexOf(watcher)来移除存储在arrayList abd中的观察者。

public void addTextChangedListener(TextWatcher watcher) { 
    if (mListeners == null) { 
     mListeners = new ArrayList<TextWatcher>(); 
    } 
    mListeners.add(watcher); 
} 
/** 
* Removes the specified TextWatcher from the list of those whose 
* methods are called 
* whenever this TextView's text changes. 
*/ 
public void removeTextChangedListener(TextWatcher watcher) { 
    if (mListeners != null) { 
     int i = mListeners.indexOf(watcher); 
     if (i >= 0) { 
      mListeners.remove(i); 
     } 
    } 
} 

看看如何TextView的去除看守内部

+0

当我尝试删除观察者的等于它从来不叫 –

+1

发布您的代码,请 –

+0

我只是tryied把一个破发点在那里进行测试。但调试器永远无法达到它。 @Override public boolean equals(Object obj){if(obj instanceof MyMaskWatcher){ return true; } else { return false; } } –