Androïde TextWatcher.afterTextChanged vs TextWatcher.onTextChanged

dans quelles circonstances devrais-je utiliser afterTextChanged au lieu de onTextChanged et vice versa? Les exemples seraient des plus instructifs en ce qu'ils expliqueraient pourquoi il faut remplacer onTextChanged par afterTextChanged et beforeTextChanged .

100
demandé sur Jonik 2009-01-25 02:03:30

3 réponses

Ces événements sont appelés dans l'ordre suivant:

  1. beforeTextChanged (CharSequence s, int start, int count, int after) .

    Cela signifie que les personnages sont sur le point d'être remplacé par un nouveau texte. le texte est uneditable.

    utilisez: quand vous avez besoin de jeter un oeil à l'ancien texte qui est sur le point de changer.

  2. onTextChanged(CharSequence s, int start, int before, int count) .

    Des modifications ont été apportées, certains caractères viennent d'être remplacés. le texte est uneditable.

    utilisez quand vous avez besoin de voir quels caractères dans le texte sont nouveaux.

  3. ) .

    Le même que ci-dessus, sauf maintenant le texte est modifiable .

    utilisez lorsque vous devez voir et éventuellement modifier le nouveau texte.

si j'écoute simplement les changements dans EditText , je n'aurai pas besoin d'utiliser les deux premières méthodes du tout. Je vais juste recevoir de nouvelles valeurs dans la troisième méthode et corriger le nouveau texte si nécessaire. Cependant, si je devais suivre en bas des changements exacts qui se produisent aux valeurs, j'utiliserais les deux premières méthodes. Si j'avais aussi besoin de modifier le texte après avoir écouté les changements, je le ferais dans la troisième méthode.

165
répondu Malcolm 2016-02-12 08:38:43

public void afterTextChanged (modifiable s)

cette méthode est appelée pour vous informer que, quelque part dans s , le texte a été modifié. Il est légitime d'apporter d'autres modifications à s à partir de ce rappel, mais faites attention à ne pas vous mettre dans une boucle infinie, parce que toute modification que vous apporterez entraînera cette méthode à être appelée de nouveau récursivement. (On ne vous dit pas où le changement a eu lieu parce que d'autres méthodes afterTextChanged() peuvent déjà avoir fait d'autres changements et invalider les offsets. Mais si vous avez besoin de savoir ici, vous pouvez utiliser setSpan(Object, int, int, int) dans onTextChanged(CharSequence, int, int, int) pour marquer votre place et puis regarder d'ici où la portée a fini.

public void beforeTextChanged (CharSequence s, int start, int count, int after)

cette méthode est appelée pour vous notifier que, dans s , les caractères count commençant par start sont sur le point d'être remplacés par un nouveau texte avec la longueur after . C'est une erreur d'essayer d'apporter des modifications à s à partir de ce rappel.

public void onTextChanged (CharSequence s, int start, int before, int count)

cette méthode est appelée pour vous notifier que, dans s , le count les caractères commençant par start viennent de remplacer l'ancien texte qui avait la longueur before . C'est une erreur d'essayer d'apporter des modifications à s à partir de ce rappel.

à droite de référence D'Android pour TextWatcher .

9
répondu GregD 2016-02-12 08:43:37

Android Textwatcher est une sorte de déclencheur qui s'appelle sur le changement de texte d'un champ de saisie.

afterTextChanged (Editable s) - cette méthode est appelée lorsque le texte a été modifié. Parce que n'importe quels changements que vous faites causeront cette méthode pour être appelé de nouveau récursivement, vous devez être vigilant sur l'exécution des opérations ici, sinon il pourrait conduire à boucle infinie .

onTextChanged (CharSequence s, int start, int before, int count) - cette méthode est appelée pour vous informer que, à l'intérieur de s, les caractères de comptage commençant au début ont juste remplacé l'ancien texte qui avait la longueur auparavant. C'est une erreur d'essayer d'apporter des modifications à s à partir de ce rappel.

0
répondu IntelliJ Amiya 2018-08-24 05:38:45