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
}
}
我有两个使用同一个 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
}
}