TextWatcher的事件被调用两次

时间:2012-08-22 13:14:00

标签: android textwatcher

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

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

3 个答案:

答案 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侦听器的新检测。