Maison >Java >javaDidacticiel >Comment éviter les boucles infinies lors de la mise en œuvre d'une exclusion mutuelle avec des écouteurs de changement de texte sous Android ?

Comment éviter les boucles infinies lors de la mise en œuvre d'une exclusion mutuelle avec des écouteurs de changement de texte sous Android ?

DDD
DDDoriginal
2024-11-12 12:53:02470parcourir

How to Prevent Infinite Loops When Implementing Mutual Exclusion with Text Change Listeners in Android?

Écouteur de changement de texte dans Android : gestion de l'exclusion mutuelle

Dans le développement d'applications Android, vous rencontrez des situations où vous devez vous assurer qu'un seul sur plusieurs champs contenant du contenu peuvent apparaître. Pour y parvenir, le Text Change Listener joue un rôle crucial.

Considérez le scénario dans lequel vous disposez de deux champs de texte, field1 et field2. Lors de la modification du champ 1, vous souhaitez effacer le champ 2, et vice versa. L'objectif est de garantir qu'un seul champ possède du contenu à un moment donné.

L'extrait de code fourni utilise TextWatcher pour répondre à cette exigence. Cependant, attacher des TextWatchers aux deux champs déclenche une boucle infinie, entraînant un crash de l'application :

field1.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        field2.setText("");
    }
});

field2.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        field1.setText("");
    }
});

Pour résoudre ce problème, une solution simple consiste à vérifier si le texte du champ n'est pas vide (c'est-à-dire que la longueur est supérieur à zéro) avant de l'effacer :

field1.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s.length() != 0) {
            field2.setText("");
        }
    }
});

field2.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s.length() != 0) {
            field1.setText("");
        }
    }
});

Cette modification garantit que le texte dans le champ opposé est effacé uniquement s'il contient un contenu non vide. En appliquant cette approche, la boucle infinie est éliminée et la fonctionnalité souhaitée est obtenue.

Il est important de respecter les conventions de dénomination et de faire référence à TextWatcher comme TextWatcher et non « Text Change Listener ». " Cette terminologie cohérente améliore la lisibilité du code et facilite sa compréhension par les autres développeurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn