Android - 在不触发 onTextChanged 的​​情况下调用退格键

Android - Call backspace without firing onTextChanged

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

没问题:当我调用 text.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); 时,它会一次又一次地触发 onTextChanged。现在有什么方法可以在不再次触发 onTextChanged 的​​情况下删除用户输入吗?

谢谢!

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

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

public abstract void afterTextChanged (Editable s)

This method is called to notify you that, somewhere within s, the text has been changed. It is legitimate to make further changes to s from this callback, but be careful not to get yourself into an infinite loop, because any changes you make will cause this method to be called again recursively.

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

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

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