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? P>
J'ai essayé comme: p>
5 Réponses :
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()); } });
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
Essayez ceci en manipulant espère que cela fonctionnera! p> p> boolean code> variable
Non si correct. Il appelle toujours ma méthode plusieurs fois. Parfois n'appelle même pas.
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()); } } });
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.
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. p>
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 ()". P>
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> 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) {}
}