所以我目前正在开发一个应用程序,它接受用户输入,触发退格键以删除输入,然后添加一些其他文本。 (所以是的,我基本上使用TextWatcher覆盖了他们的输入)
没问题:当我拨打text.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
时,它会一次又一次地触发onTextChanged。现在有没有办法删除用户输入而不再触发onTextChanged?
谢谢!
答案 0 :(得分:1)
不要从onTextChanged回调中调度关键事件。您可以使用文本保留内部缓冲区,并在每个有趣的键事件上将整个TextView设置为该缓冲区。
答案 1 :(得分:1)
我通过调用edittext.removeTextChangedListener(this);
修复了它,然后调度了密钥,然后再次调用edittext.addTextChangedListener(this);
。这也是一个干净的方式吗?很高兴听到你的意见。
答案 2 :(得分:0)
您可能正尝试使用TextWatcher
进一步更改用户刚刚更改的文字。为了能够做到这一点,您最好的选择是使用afterTextChanged
方法:
public abstract void afterTextChanged (Editable s)
调用此方法通知您,在s中的某个位置,文本已更改。从这个回调中对s进行进一步的更改是合理的,但要注意不要让自己陷入无限循环,因为你所做的任何更改都会导致这个方法再次被递归调用。
为避免递归,您可以设置一个标志,指示您是更改文本的标志,并在下一次调用中清除该标志。您还可以使用其他回调(beforeTextChanged
和onTextChanged
)来收集有关更改的更多信息。
参考:http://developer.android.com/reference/android/text/TextWatcher.html