Android - 调用退格键而不触发onTextChanged

时间:2015-02-24 20:19:25

标签: java android textwatcher

所以我目前正在开发一个应用程序,它接受用户输入,触发退格键以删除输入,然后添加一些其他文本。 (所以是的,我基本上使用TextWatcher覆盖了他们的输入)

没问题:当我拨打text.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));时,它会一次又一次地触发onTextChanged。现在有没有办法删除用户输入而不再触发onTextChanged?

谢谢!

3 个答案:

答案 0 :(得分:1)

不要从onTextChanged回调中调度关键事件。您可以使用文本保留内部缓冲区,并在每个有趣的键事件上将整个TextView设置为该缓冲区。

答案 1 :(得分:1)

我通过调用edittext.removeTextChangedListener(this);修复了它,然后调度了密钥,然后再次调用edittext.addTextChangedListener(this);。这也是一个干净的方式吗?很高兴听到你的意见。

答案 2 :(得分:0)

您可能正尝试使用TextWatcher进一步更改用户刚刚更改的文字。为了能够做到这一点,您最好的选择是使用afterTextChanged方法:

public abstract void afterTextChanged (Editable s)
  

调用此方法通知您,在s中的某个位置,文本已更改。从这个回调中对s进行进一步的更改是合理的,但要注意不要让自己陷入无限循环,因为你所做的任何更改都会导致这个方法再次被递归调用。

为避免递归,您可以设置一个标志,指示您是更改文本的标志,并在下一次调用中清除该标志。您还可以使用其他回调(beforeTextChangedonTextChanged)来收集有关更改的更多信息。

参考:http://developer.android.com/reference/android/text/TextWatcher.html