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