Listener de modification de texte

 

Il est possible de poser un listener nommé TextWatcher qui se déclenchera à différents niveaux de modification d'un texte (par exemple sur l'auto-complétion, mais plus généralement sur les objets de type editeur).

 

Il faut implementer les méthodes suivantes :

afterTextChanged : Appeler après changement du texte (public void afterTextChanged(Editable editable))
beforeTextChanged : Appeler avant que le texte ne soit changé (public void beforeTextChanged(CharSequence charSeq, int positionPremierCaractereChange, int nombreDeCaracteresChanges, int longeurNouvelleChaine))
onTextChanged : Appeler pendant le changement du texte (public void onTextChanged(CharSequence charSeq, int positionPremierCaractereChange, int nombreDeCaracteresAncienTexte, int nombreDeNouveauxCaracteres))

afterTextChanged a en paramètre un Editable. Il sera possible de modifier, ajouter des caractères dans cet objet. Mais attention, tous changements de l'objet vont redéclencher les méthodes afterTextChanged, beforeTextChanged et onTextChanged (risque de boucle infinie !).

beforeTextChanged: Aucune modification du texte n'est possible à ce niveau !

onTextChanged: Aucune modification du texte n'est possible à ce niveau !

 

Image non trouvée !afterTextChanged et beforeTextChanged seront rarement utilisées.

 

Voici un exemple qui reprend celui de l'auto-complétion et exploitant beforeTextChanged:

Nous allons vérifier le principe de relance du afterTextChanged et des deux autres méthodes après auto-modification du texte.

Si l'utilisateur choisi "Rouge", le programme va changer automatiquement son choix avec la valeur "Vert"

Regardez alors dans les logs et voyez le double appel aux méthodes...

Le main.xml:

Et le code: