在我的应用程序中,我将TextWatcher放在EditText上。当我更改EditText的文本时,TextWatcher的事件被调用两次。
我正在使用模拟器来运行应用程序。
答案 0 :(得分:10)
您的代码如何?这是TextWatcher的正常行为。 例如:
myInput.addTextChangedListener(new TextWatcher() {
boolean mToggle = false;
public void onTextChanged(CharSequence cs, int s, int b, int c) {}
public void afterTextChanged(Editable editable) {
if (mToggle) {
Toast.makeText(getBaseContext(), "HIT KEY",Toast.LENGTH_LONG).show();
}
mToggle = !mToggle;
}
public void beforeTextChanged(CharSequence cs, int i, int j, int k) {}
});
答案 1 :(得分:2)
我的问题是我将textWatcher添加了两次mEditText.addTextChangedListener(mTextWatcher)
,这导致两次调用它的回调!
我在onCreate()
中添加了textWatcher一次,在onStart()
中添加了一次。
我只应添加onStart
并删除onStop()
。
答案 2 :(得分:0)
如果您在editText.setText("string")
侦听器内调用TextWatcher
(例如,在afterTextChanged
方法中),TextWatcher
将检测到新的文本更改,可能会通过调用再次setText
并创建一个循环。
editText.setText("string")
的替代方法可能是:
editText.getText().clear();
editText.append("string");
,它不会引起TextWatcher
侦听器的新检测。