Метод Watcher срабатывает при вводе каждого символа. Итак, я построил этот код на основе метода 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);}
}
});
}
Чтобы использовать его, просто позвоните так:
onChange(YourEditText, new Runnable(){public void run(){
// V V YOUR WORK HERE
}}
);
Вы можете игнорировать функцию comS, заменив !comS(dat.s,""+EdTe.getText()) на функцию !equal. Однако сама функция equal некоторое время работает некорректно во время выполнения.
Слушатель onChange запомнит старые данные EditText, когда пользователь введет фокус, а затем сравнит новые данные, когда пользователь потеряет фокус или перейдет к другому вводу. Если сравнение старой строки не совпадает с новой строкой, она запускает работу.
Если у вас есть только 1 EditText, вам нужно будет сделать функцию ClearFocus, сделав Ultimate Secret Transparent Micro EditText ???? за пределами окон ???? и запросив на него фокус, а затем спрятав клавиатуру с помощью диспетчера методов импорта.
person
phnghue
schedule
27.01.2020