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
.
3 réponses
Ces événements sont appelés dans l'ordre suivant:
-
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. -
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. -
) .
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.
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 utilisersetSpan(Object, int, int, int)
dansonTextChanged(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èrescount
commençant parstart
sont sur le point d'être remplacés par un nouveau texte avec la longueurafter
. 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
, lecount
les caractères commençant parstart
viennent de remplacer l'ancien texte qui avait la longueurbefore
. C'est une erreur d'essayer d'apporter des modifications às
à partir de ce rappel.
à droite de référence D'Android pour TextWatcher .
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.