Die Watcher-Methode wird bei jeder Zeicheneingabe ausgelöst. Also habe ich diesen Code basierend auf der onFocusChange-Methode erstellt:
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);}
}
});
}
Um es zu benutzen, rufen Sie einfach so auf:
onChange(YourEditText, new Runnable(){public void run(){
// V V YOUR WORK HERE
}}
);
Sie können die Funktion comS ignorieren, indem Sie! ComS (dat.s, "" + EdTe.getText ()) durch die Funktion! Equal ersetzen. Allerdings funktioniert die Gleichheitsfunktion selbst einige Zeit zur Laufzeit nicht richtig.
Der onChange-Listener merkt sich beim Eingeben des Benutzerfokus alte Daten von EditText und vergleicht die neuen Daten, wenn der Benutzer den Fokus verliert oder zu einer anderen Eingabe springt. Wenn der alte String nicht mit dem neuen String verglichen wird, wird die Arbeit ausgelöst.
Wenn Sie nur 1 EditText haben, müssen Sie eine ClearFocus-Funktion erstellen, indem Sie einen Ultimate Secret Transparent Micro EditText (außerhalb der Fenster) erstellen und den Fokus darauf anfordern. Anschließend können Sie die Tastatur über den Import Method Manager ausblenden.