addTextChangedListener 提供三個回調,典型場景用 afterTextChanged 取得最終內容。
editText.addTextChangedListener(new TextWatcher() {
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
String input = s.toString().trim();
if ("1".equals(input)) {
textView.setText("11");
} else if ("2".equals(input)) {
textView.setText("222");
} else {
textView.setText("3333 " + input);
}
}
});
equals:== 比較記憶體位址,"1".equals(input) 避免空指標且語義正確。afterTextChanged 中修改同一 EditText 會再次觸發監聽。若需修改輸入框本身,改用 onTextChanged 並判斷 count != after,或移除/重加監聽器。Debounce(如 RxJava debounce(300, TimeUnit.MILLISECONDS))減少 UI 更新次數。InputFilter 設 setFilters 更輕量。