Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-如何在触发TextWatcher之前运行完整方法?_Android_Android Edittext_Textwatcher - Fatal编程技术网

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

Android-如何在触发TextWatcher之前运行完整方法?,android,android-edittext,textwatcher,Android,Android Edittext,Textwatcher,我有两个使用相同TextWatcher的EditText视图。 我可以手动一个接一个地输入文本。这会为每个单独的输入触发TextWatcher,这很好。但是,还有一种方法确实会更改这两个EditText视图中的文本。我想让它触发观察者一次,但现在它被触发两次。我的代码看起来像这样 editText1.addTextChangedListener(myTextWatcher); editText2.addTextChangedListener(myTextWatcher); private vo

我有两个使用相同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的“聆听”能力,然后我手动将文本输入到这些编辑文本中。我怎样才能做到这一点

任何朝正确方向的推动都是值得赞赏的。

你可以试试这个

在调用
myMethod
时,可以先将edittext设置为null
addTextChangedListener
,然后将edittext设置为
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 
}
编辑

在不触发文本监视程序的情况下设置文本


您需要在使用和时注销您的
TextWatcher
,然后根据需要重新注册。

只需创建一个布尔值即可-

boolean BLOCK = false;

现在在onTextChange中,方法如下

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

}

谢谢,但是如果我想在编辑文本中手动输入文本,会发生什么?在这种情况下,观察者将不会“听到”,对吗?他的意思是他希望在不触发文本观察者:p的情况下设置文本(同时手动设置文本)@NileshRathod@Zerato您也可以在完成工作后删除textwatcher。是的,稍后再添加@Zerato基本清除并添加@桑塔努尔和我在上面所做的一样谢谢,我相信这是对我来说最简单的答案。但是,我认为应该是:
private void myMethod(String firstText,String secondText){BLOCK=true;editText1.setText(firstText);BLOCK=false;editText2.setText(secondText);}
是的,您可以随心所欲
void onTextChanged (CharSequence s, int start, int before, int count){
  if(!BLOCK){
      // your code 
   }

}