J'ai trois EditText
widgets dans ma disposition de vue. Existe-t-il un moyen d'en utiliser un TextWatcher
pour les trois EditTexts
?
125
J'ai trois EditText
widgets dans ma disposition de vue. Existe-t-il un moyen d'en utiliser un TextWatcher
pour les trois EditTexts
?
Réponses:
Je viens de rencontrer ce problème. Je l'ai résolu en créant une implémentation de classe interne
TextWatcher
qui prend une vue comme argument. Ensuite, dans l'implémentation de la méthode, activez simplement la vue pour voir de laquelle elleEditable
provientDéclaration:
Usage:
la source
Single TextWatcher for multiple EditTexts
. Il s'agit de 3 instances d'une classe TextWatcher. Donc, 3 TextWatchers distincts contrôlent 3 EditTexts.Si vous souhaitez utiliser uniquement les éditables de comparaison afterTextChanged:
la source
==
place de.equals()
.Implémentation de MultiTextWatcher
Usage
la source
TextView
le changement.Si vous souhaitez utiliser la comparaison onTextChanged
hashCode()
mentionnée ci-dessous -Ou
Si vous souhaitez utiliser la comparaison afterTextChanged
Editable
mentionnée ci-dessous -la source
Cela fonctionnera avec ce code
Puis ajoutez ceci dans oncreate
la source
Je sais que c'est un vieux problème et qu'il y a la bonne décision. J'écrirai le leur, peut-être que cela aidera quelqu'un.
Émulation de l'exemple classique où nous avons N EditText, et nous voulons afficher le bouton si tous les champs sont remplis. Cet exemple est logique, surtout si vous utilisez davantage des validateurs pour chacun.
J'ai fait un exemple concernant le problème, mais vous pouvez faire n'importe quel ensemble
MultiEditText.class
Ça a l'air très simple, maintenant
CustomTextWatcher.class
Je vais ajouter une mise en page, pour ne pas perdre de temps
multi_edit_text.xml
la source
Demandez à votre classe d'hériter d'Activity et d'implémenter TextWatcher.
Ensuite, grâce à la magie du polymorphisme, il vous suffit de vous abonner aux événements.
Cela ne vous dira pas ce que TextEdit a changé, mais en utilisant une combinaison de cela et de la réponse de Sky Kelsey , vous pourriez bien régler cela.
la source
Ensuite:
la source
la source
C'est ma solution pour kotlin. Vous pouvez simplement utiliser l'égalité référentielle (===) pour vérifier le même objet et cela fonctionne parfaitement.
la source
Je sais que cette question est ancienne, mais je voulais partager une de mes solutions (à Kotlin). Ma solution est une amélioration de la réponse de @Shwarz Andrei, ma raison était de savoir si vous vouliez manipuler plus de choses / objets.
Au lieu de passer à la fois
list of EditTexts
et ena Button
tant que paramètres, vous ne passeriez que votrelist of editText
. Ensuite, dans votre classe personnalisée, vous implémenteriez un lambda tel:Ensuite, vous le placerez ou le rehausserez à l'intérieur du
afterTextChanged
la source
Voici comment je l'ai fait:
Créez un ArrayList de EditTexts, puis utilisez une boucle for pour appliquer le TextWatcher à tous les EditTexts, si vous avez un comportement pour tous les editTexts, appliquez-le simplement là, si vous spécifiez des comportements pour certains editTexts spécifiques, alors vous pouvez utiliser un if instruction pour sélectionner et appliquer à des editTexts individuels.
Voici mon code:
J'espère que cela t'aides
la source
onTextChanged
sur un EditText. L'ajout d'unonFocusChange
pour plusieurs widgets est beaucoup plus simple, car il a passé l'objet expéditeur avec l'appel de méthode. Ensuite, vous pouvez examiner quel objet a déclenché l'appel et le gérer à partir de là.