在我的应用程序中,我将 TextWatcher 放在 EditText 上。当我更改 EditText 的文本时,TextWatcher 的事件被调用了两次。
我正在使用模拟器来运行应用程序。
在我的应用程序中,我将 TextWatcher 放在 EditText 上。当我更改 EditText 的文本时,TextWatcher 的事件被调用了两次。
我正在使用模拟器来运行应用程序。
你的代码看起来如何?这是 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) {}
});
我的问题是我两次添加了 textWatcher mEditText.addTextChangedListener(mTextWatcher)
,这导致调用它的回调两次!
我已经添加了 textWatcher 一次onCreate()
和一次onStart()
. 我应该只添加onStart
和删除onStop()
.
如果您在侦听器editText.setText("string")
内部调用TextWatcher
(例如在afterTextChanged
方法中),TextWatcher
将检测到新的文本更改,最终可能会再次调用setText
并创建一个循环。
一种替代方法editText.setText("string")
可能是:
editText.getText().clear();
editText.append("string");
这不会引起TextWatcher
听众的新检测。