14

在我的应用程序中,我将 TextWatcher 放在 EditText 上。当我更改 EditText 的文本时,TextWatcher 的事件被调用了两次。

我正在使用模拟器来运行应用程序。

4

3 回答 3

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) {}
    });
于 2012-08-22T14:55:26.590 回答
2

我的问题是我两次添加了 textWatcher mEditText.addTextChangedListener(mTextWatcher),这导致调用它的回调两次!

我已经添加了 textWatcher 一次onCreate()和一次onStart(). 我应该只添加onStart和删除onStop().

于 2017-01-30T22:41:03.653 回答
0

如果您在侦听器editText.setText("string")内部调用TextWatcher(例如在afterTextChanged方法中),TextWatcher将检测到新的文本更改,最终可能会再次调用setText并创建一个循环。

一种替代方法editText.setText("string")可能是:

editText.getText().clear();
editText.append("string");

这不会引起TextWatcher听众的新检测。

于 2020-06-03T18:15:22.373 回答