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 !
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: