เมธอด 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 ()) ด้วย! เท่ากับฟังก์ชัน อย่างไรก็ตามฟังก์ชั่นเท่ากันบางครั้งทำงานไม่ถูกต้องในเวลาทำงาน
ผู้ฟัง onChange จะจดจำข้อมูลเก่าของ EditText เมื่อผู้ใช้พิมพ์โฟกัสจากนั้นเปรียบเทียบข้อมูลใหม่เมื่อผู้ใช้หลุดโฟกัสหรือข้ามไปยังอินพุตอื่น หากเปรียบเทียบสตริงเก่ากับสตริงใหม่ไม่เหมือนกันจะทำให้เกิดการทำงาน
หากคุณมีเพียง 1 EditText คุณจะต้องสร้างฟังก์ชัน ClearFocus โดยสร้าง Ultimate Secret Transparent Micro EditText Edit นอกหน้าต่าง😽และขอโฟกัสจากนั้นซ่อนแป้นพิมพ์ผ่าน Import Method Manager