Java Android-在不触发onTextChanged的情况下调用backspace

Java Android-在不触发onTextChanged的情况下调用backspace,java,android,textwatcher,Java,Android,Textwatcher,因此,我目前正在开发一个应用程序,它接受用户输入,启动一个退格来删除输入,然后添加一些其他文本。(因此,是的,我基本上是使用TextWatcher覆盖他们的输入) 没有问题:当我调用text.dispatchKeyEvent(newkeyevent(KeyEvent.ACTION\u DOWN,KeyEvent.KEYCODE\u DEL))时,它将触发一次又一次的ContextChanged。现在有没有办法删除用户输入而不再次触发ContextChanged 谢谢 不要从ContextChan

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

没有问题:当我调用
text.dispatchKeyEvent(newkeyevent(KeyEvent.ACTION\u DOWN,KeyEvent.KEYCODE\u DEL))时,它将触发一次又一次的ContextChanged。现在有没有办法删除用户输入而不再次触发ContextChanged


谢谢

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

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

public abstract void afterTextChanged (Editable s)
调用此方法是为了通知您,在s中的某个位置,文本已更改。从这个回调对s进行进一步的更改是合法的,但是要小心不要让自己陷入无限循环,因为您所做的任何更改都会导致再次递归调用这个方法

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


参考:

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

您是否尝试过直接设置文本?类似于textView.setText(text.substring(0,长度-1))。