Je connais un peu TextWatcher
mais cela se déclenche sur chaque personnage que vous entrez. Je veux un auditeur qui se déclenche chaque fois que l'utilisateur termine l'édition. C'est possible? J'obtiens également TextWatcher
une instance de Editable
mais j'ai besoin d'une instance de EditText
. Comment puis-je l'obtenir?
EDIT : la deuxième question est plus importante. Veuillez y répondre.
Réponses:
Tout d'abord, vous pouvez voir si l'utilisateur a terminé de modifier le texte s'il
EditText
perd le focus ou si l'utilisateur appuie sur le bouton Terminé (cela dépend de votre implémentation et de ce qui vous convient le mieux). Deuxièmement, vous ne pouvez pas obtenir uneEditText
instance dans leTextWatcher
uniquement si vous avez déclaré leEditText
comme objet d'instance. Même si vous ne devriez pas modifier leEditText
dans leTextWatcher
car il n'est pas sûr.ÉDITER:
Pour pouvoir intégrer l'
EditText
instance dans votreTextWatcher
implémentation, vous devez essayer quelque chose comme ceci:Notez que l'exemple ci-dessus peut contenir des erreurs, mais je voulais juste vous montrer un exemple.
la source
Cela me dérangeait que l'implémentation d'un écouteur pour tous mes champs EditText m'obligeait à avoir un code laid et détaillé, alors j'ai écrit la classe ci-dessous. Peut être utile à quiconque tombe dessus.
Maintenant, implémenter un auditeur est un peu plus propre.
Quant à la fréquence à laquelle il se déclenche, on pourrait peut-être implémenter une vérification pour exécuter le code souhaité
//Do stuff
après unla source
Quiconque utilise ButterKnife . Vous pouvez utiliser comme:
la source
Je l'ai fait en utilisant
AutotextView
:la source
la source
TextWatcher
n'a pas fonctionné pour moi car il a continué à tirer pour tousEditText
et à bousiller les valeurs de chacun.Voici ma solution:
Par conséquent, en utilisant la
getChildAt(xx)
méthode, vous pouvez récupérer n'importe quel élément dansListView
et obtenir l'élément individuel à l'aide defindViewById
. Et il donnera alors la valeur la plus récente.la source
Autant que je puisse y penser, il n'y a que deux façons de le faire. Comment savoir que l'utilisateur a fini d'écrire un mot? Soit sur le focus perdu, soit en cliquant sur un bouton "ok". Il n'y a aucun moyen dans mon esprit que vous puissiez savoir que l'utilisateur a appuyé sur le dernier caractère ...
Alors appelez
onFocusChange(View v, boolean hasFocus)
ou ajoutez un bouton et un écouteur de clic.la source
La méthode Watcher se déclenche à chaque entrée de caractère. Donc, j'ai construit ce code basé sur la méthode onFocusChange:
Pour l'utiliser, appelez simplement comme ceci:
Vous pouvez ignorer la fonction comS en remplaçant! ComS (dat.s, "" + EdTe.getText ()) par la fonction! Equal. Cependant, la fonction d'égalité elle-même ne fonctionne pas correctement pendant l'exécution.
L'écouteur onChange se souviendra des anciennes données d'EditText lors de la saisie du focus utilisateur, puis comparera les nouvelles données lorsque l'utilisateur perd le focus ou passe à une autre entrée. Si la comparaison de l'ancienne chaîne n'est pas la même nouvelle chaîne, cela déclenche le travail.
Si vous n'avez qu'un seul EditText, vous devrez alors créer une fonction ClearFocus en créant un Ultimate Secret Transparent Micro EditText 😸 en dehors des fenêtres 😽 et demander le focus, puis masquer le clavier via Import Method Manager.
la source