0
votes

Comment appelle-t-je la méthode de l'après-angle () sur TextWatcher uniquement pour une fois?

Je veux appeler la méthode de l'après-vente (modifiable S) dans TextWatcher uniquement pour une fois lorsque l'utilisateur est entré complètement dans le texte de EditText.

Méthode actuellement après-vente est appelée après que chaque caractère est entré. Comment puis-je appeler la méthode de la checksentenence () pour une seule fois?

J'ai essayé comme: xxx


0 commentaires

5 Réponses :


0
votes

Après avoir dactylographier un caractère, retirez votre TextListener

 sentenceEdit.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }
            public void onTextChanged(CharSequence s, int start, int before, int count){
 if (s.toString().length() > 0) {
                        sentenceEdit.removeTextChangedListener(this);
                    } 
            }

            public void afterTextChanged(Editable s) {
                isSentenceModified=true;
                //Toast.makeText(MainActivity.this,"Editable:"+s,Toast.LENGTH_SHORT).show();
                checkSentence(s.toString());
            }
        });


5 commentaires

Qu'est-ce que la longueur.Tostring () signifie dans votre réponse?


désolé pour ça si (S.Tostring (). Longueur ()> 0) {} /// La longueur est votre personnage


Très bien, mais comment appeler après-vente () lorsque l'auditeur a été supprimé?


Après avoir supprimé la textlisterner où vous ajoutez ou à partir de quelle condition vous avez besoin de ce temps AddtextListener


ou partager votre logique complète vérifiera



0
votes

Essayez ceci en manipulant boolean variable xxx

espère que cela fonctionnera!


1 commentaires

Non si correct. Il appelle toujours ma méthode plusieurs fois. Parfois n'appelle même pas.



0
votes

Nous ne savons pas quand le processus de l'utilisateur se terminera. Donc, vous pouvez utiliser l'auditeur de changement de mise au point.

sentenceEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) {
         checkSentence(sentenceEdit.getText().toString());
        }
    }
});


2 commentaires

Oui j'ai essayé cela avant. Mais le problème se pose lorsque nous avons 3 édittes consécutifs. Quand sera le foyer perdu pour le dernier editext?


Vous devriez définir l'auditeur pour d'autres édittes. Je pense que le scénario sera comme ça; Vous cochez la dernière fois que le processus de l'utilisateur se terminera (par exemple; bouton utilisateur Cliquez). En fait, j'ai une autre idée.



0
votes

En bref, vous ne pouvez pas. La méthode de rappel n'est pas conçue pour être appelée une seule fois, car @Mustafa Yanik a pointé que vous ne savez jamais lorsque l'action de l'utilisateur se terminera.

L'autre approche possible que vous puissiez utiliser est de détecter une fin de phrase pour E.g quand un "". ou alors '?' ou alors '!' est ajouté au texte, puis appelle votre méthode "CheckSentence ()".


0 commentaires

0
votes

Comme @KALPESH RUPANI dit, donnez-lui un essai avec un booléen.

Essayez ceci, avec un booléen pour basculer l'auditeur et un texte de texte personnalisé. p>

dans votre méthode oncreate, joignez l'écoute: p> xxx pré>

Créez un écouteur personnalisé Textwatcher comme classe intérieure. P>

Vous créez un constructeur personnalisé qui demande une variable booléenne. Pour chaque editext, joignez l'auditeur comme ci-dessus et transmettez-le le «vrai» booléen. Une fois que le type d'utilisateur dans l'EditText, vous désactivez l'auditeur. P>

class MyCustomTextWatcher implements TextWatcher { 

    Boolean isActivated;

    public MyCustomTextWatcher(boolean isActivated){
        this.isActivated = isActivated;

    }

    @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 (isActivated) {

             // Place your code here

          }

         isActivated = false
    }

    @Override
    public void afterTextChanged(Editable s) {}


}


0 commentaires