O método Watcher é acionado em cada entrada de caractere. Então, eu construí este código com base no método 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);}
}
});
}
Para usá-lo, basta chamar assim:
onChange(YourEditText, new Runnable(){public void run(){
// V V YOUR WORK HERE
}}
);
Você pode ignorar a função comS substituindo! ComS (dat.s, "" + EdTe.getText ()) pela função! Equal. No entanto, a própria função igual às vezes não funciona corretamente em tempo de execução.
O ouvinte onChange se lembrará de dados antigos de EditText quando o usuário focalizar a digitação e, em seguida, comparar os novos dados quando o usuário perder o foco ou pular para outra entrada. Se comparar a String antiga e não a mesma nova, ele dispara o trabalho.
Se você tiver apenas 1 EditText, então você precisará fazer uma função ClearFocus criando um Ultimate Secret Transparent Micro EditText 😸 fora das janelas 😽 e solicitar o foco para ele e, em seguida, ocultar o teclado através do Import Method Manager.