Maison >Java >javaDidacticiel >Comment empêcher une boucle infinie lors de la suppression des champs EditText sous Android ?

Comment empêcher une boucle infinie lors de la suppression des champs EditText sous Android ?

DDD
DDDoriginal
2024-11-14 12:45:02702parcourir

How to Prevent an Infinite Loop When Clearing EditText Fields in Android?

Android EditText : écoute des modifications de texte et vidage des autres champs

Pour garantir qu'un seul champ sur deux contient des données, il devient impératif de effacer l'autre champ si l'un d'entre eux est modifié. Ce besoin survient dans les situations où field1 et field2, deux champs EditText, ne doivent pas tous deux contenir des valeurs simultanément.

Comme présenté dans la question, attacher un TextWatcher à field1 et field2 provoque une boucle infinie où les champs s'effacent les uns les autres. les autres indéfiniment.

Solution :

Pour résoudre ce problème, implémentez une vérification pour effacer le champ opposé uniquement lorsque le champ actuel contient du texte. Ceci peut être réalisé en examinant la longueur de la chaîne d'entrée.

Dans le code modifié ci-dessous, une instruction "if" vérifie si la longueur de la chaîne d'entrée (c'est-à-dire le texte saisi dans le champ actuel) est différent de 0. Si tel est le cas, le champ opposé est effacé :

field1.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {}

    @Override
    public void beforeTextChanged(CharSequence s, int start,
        int count, int after) {
    }

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

field2.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {}

    @Override
    public void beforeTextChanged(CharSequence s, int start,
        int count, int after) {
    }

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

En incorporant cette vérification, la boucle infinie est rompue et la fonctionnalité souhaitée est obtenue, garantissant qu'un seul des champs contient des données à tout moment.

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