La méthode Watcher se déclenche à chaque entrée de caractère. Donc, j'ai construit ce code basé sur la méthode onFocusChange:
public static boolean comS(String s1,String s2){
if (s1.length()==s2.length()){
int l=s1.length();
for (int i=0;i<l;i++){
if (s1.charAt(i)!=s2.charAt(i))return false;
}
return true;
}
return false;
}
public void onChange(final EditText EdTe, final Runnable FRun){
class finalS{String s="";}
final finalS dat=new finalS();
EdTe.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {dat.s=""+EdTe.getText();}
else if (!comS(dat.s,""+EdTe.getText())){(new Handler()).post(FRun);}
}
});
}
Pour l'utiliser, appelez simplement comme ceci:
onChange(YourEditText, new Runnable(){public void run(){
// V V YOUR WORK HERE
}}
);
Vous pouvez ignorer la fonction comS en remplaçant! ComS (dat.s, "" + EdTe.getText ()) par la fonction! Equal. Cependant, la fonction d'égalité elle-même ne fonctionne pas correctement pendant l'exécution.
L'écouteur onChange se souviendra des anciennes données d'EditText lors de la saisie du focus utilisateur, puis comparera les nouvelles données lorsque l'utilisateur perd le focus ou passe à une autre entrée. Si la comparaison de l'ancienne chaîne n'est pas la même nouvelle chaîne, cela déclenche le travail.
Si vous n'avez qu'un seul EditText, vous devrez alors créer une fonction ClearFocus en créant un Ultimate Secret Transparent Micro EditText 😸 en dehors des fenêtres 😽 et demander le focus, puis masquer le clavier via Import Method Manager.