คำตอบสั้น ๆ
คุณสามารถตรวจสอบว่ามุมมองใดในปัจจุบันมีจุดโฟกัสเพื่อแยกความแตกต่างระหว่างเหตุการณ์ที่เรียกใช้ของผู้ใช้และโปรแกรม
EditText myEditText = (EditText) findViewById(R.id.myEditText);
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (myEditText.hasFocus()) {
// is only executed if the EditText was directly changed by the user
}
}
//...
});
คำตอบยาว
นอกเหนือจากคำตอบสั้น ๆ : ในกรณีที่myEditText
มีโฟกัสอยู่แล้วเมื่อคุณเปลี่ยนข้อความที่คุณควรโทรclearFocus()
โดยใช้โปรแกรมจากนั้นคุณจะโทรหาsetText(...)
และหลังจากที่คุณขอโฟกัสอีกครั้ง เป็นความคิดที่ดีที่จะใส่ไว้ในฟังก์ชันยูทิลิตี้:
void updateText(EditText editText, String text) {
boolean focussed = editText.hasFocus();
if (focussed) {
editText.clearFocus();
}
editText.setText(text);
if (focussed) {
editText.requestFocus();
}
}
สำหรับ Kotlin:
เนื่องจาก Kotlin สนับสนุนฟังก์ชันส่วนขยายฟังก์ชันยูทิลิตี้ของคุณอาจมีลักษณะดังนี้:
fun EditText.updateText(text: String) {
val focussed = hasFocus()
if (focussed) {
clearFocus()
}
setText(text)
if (focussed) {
requestFocus()
}
}