多次触发 TextWatcher 事件

TextWatcher event is fired multiple times

我遇到了一个奇怪的错误,TextWatcher 在一次文本更改时使用不同的输入多次触发,主要是在输入或删除 spaces 时。

经过一些调查,我在“afterTextChanged”上得到了以下结果:
测试1,在String "Suger" -> "Su gar"中输入space:

  1. “加”
  2. " "
  3. “苏”
  4. “苏咖喱”

测试2,在String "Su gar" -> "Su ga r"中输入另一个space:

  1. “苏”
  2. “苏”
  3. “苏嘎”
  4. “苏嘎儿”

我已经找到了一个相关的问题,建议关闭文本建议(我想保留)或只接听第一个电话(这在我的测试中是完全错误的): TextWatcher events are being fired multiple times

从理论上讲,我可以只接受每个事件并每次都更新,因为最后一个是正确的,但我真的不希望在我的视图模型中进行 3-4 次更新,而此时应该进行一次更新。

有没有人也遇到过这个问题并且有可行的解决方案?

如果需要,我可以添加一些代码,但我实际上只是使用设置为 EditText 的 Textwatcher 的默认实现。

郑重声明,可能 运行 遇到相同问题的任何其他人:

我刚刚坐下来为这个话题注入新的活力,并设法在不使用去抖动器或通过完全删除 textwatcher 停用我的自动完成功能的情况下解决它。

相反,我使用了这样的 focusListener:

   int pos = this.getAbsoluteAdapterPosition();
    et_text.setOnFocusChangeListener((v, hasFocus) -> {
        if (!hasFocus) {
            updateText(pos, et_text.getText().toString());
        }
    });

有了这个,我只得到用户输入文本的最终结果,中间没有触发任何事件。 目前还有一个小问题,因为用户可以输入一些东西,然后按我的保存按钮,他的输入丢失了(由于焦点没有改变),但这是一个小问题,我相信这会有帮助,也是。