2017-09-26 5 views
0

J'essaie d'ajouter des TextWatchers sur un EditText, mais je devrais tous les supprimer quand j'en ai besoin.Supprimer tous les TextWatchers d'un EditText

... 

@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(); 
}  

mais cela n'a pas fonctionné, aucun ideias?

Répondre

1

Veillez à surcharger equals() dans la classe TextWather étendue. Parce que watcher stocké dans arrayList abd enlevé en appelant arraylist.indexOf(watcher) qui dépendent de la fonction égale.

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

voir comment textView supprimer Watcher interne

+0

Lorsque je tente d'enlever le veilleur Egaux jamais appelé son –

+1

envoyer votre code s'il vous plaît –

+0

Je viens tryied de mettre un point de rupture là-bas pour le tester. Mais le débogueur ne l'atteint jamais. @Override public boolean est égal à (Object obj) { if (obj instanceof MyMaskWatcher) { return true; } else { return false; } } –