首页 文章

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

提问于
浏览
-1

我有两个使用相同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,然后在myMethod运行后让TextWatcher执行操作,并且editText1和editText2都已更改 . 但是,我仍然希望保持TextWatcher“听到”的能力,然后我手动将文本输入到这些EditTexts中的任何一个 . 我怎样才能做到这一点?

任何推动正确方向的人都会受到赞赏 .

2 回答

  • 0

    只需创建一个布尔值 -

    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 
       }
    
    }
    
  • 1

    你可以试试这个

    您可以先将 addTextChangedListener 设置为您的editext,而不是将 myMethod 设置为 addTextChangedListener 设置为您的edittext,如下面的示例代码

    // 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 
    }
    

    EDIT

    setText,不触发文本观察器

    您需要在使用 setText 时取消注册 TextWatcher ,然后根据您的要求重新注册 .

相关问题