Android - 如何在触发 TextWatcher 之前 运行 完成方法?

Android - How to run full method before triggering TextWatcher?

我有两个使用同一个 TextWatcher 的 EditText 视图。 我可以手动向这些输入文本,一个接一个。这会为每个单独的输入触发 TextWatcher - 这很好。但是,还有一种方法可以更改这两个 EditText 视图中的文本。我希望它只触发一次观察者,但目前它被触发了两次。我的代码看起来像这样。

editText1.addTextChangedListener(myTextWatcher);
editText2.addTextChangedListener(myTextWatcher);

private void myMethod(String firstText, String secondText) {
    editText1.setText(firstText); //This triggers watcher 
    editText2.setText(secondText); //And this triggers watcher once again
}

所以基本上,我想做的是调用 myMethod,然后让 TextWatcher 在 myMethod 具有 运行 并且 editText1 和 editText2 都已更改后执行操作。 但是,我仍然想保持 TextWatcher "hear" 的能力,然后我手动将文本输入到这些 EditText 中的任何一个。我怎样才能做到这一点?

任何朝着正确方向的推动都会受到赞赏。

你可以试试这个

您可以先将 null addTextChangedListener 设置为您的编辑文本,而不是在您调用 myMethod 时将 addTextChangedListener 设置为您的编辑文本,如下面的示例代码

// set null TextChangedListener to your editText
editText1.addTextChangedListener(null);
editText2.addTextChangedListener(null);
myMethod("Nilu","Neel");

private void myMethod(String firstText, String secondText) {
    editText1.setText(firstText); //This triggers watcher 
    editText2.setText(secondText); //And this triggers watcher once again
    editText1.addTextChangedListener(myTextWatcher);// set here your TextWatcheroriginal 
    editText2.addTextChangedListener(myTextWatcher);/ set here your TextWatcheroriginal 
}

编辑

setText without triggering text watcher

您需要在使用 setText 和 时取消注册您的 TextWatcher,然后根据您的要求 re-register 它。

只需创建一个布尔值作为 -

boolean BLOCK = false;

private void myMethod(String firstText, String secondText) {
    BLOCK = true;
    editText1.setText(firstText); //Watcher won't be triggered first time
    BLOCK = false;
    editText2.setText(secondText); //Watcher will be triggered now

}

现在在 onTextChange 方法中做为

void onTextChanged (CharSequence s, int start, int before, int count){
  if(!BLOCK){
      // your code 
   }

}