代码之家  ›  专栏  ›  技术社区  ›  Zerato Sanjay Kumar

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

  •  -1
  • Zerato Sanjay Kumar  · 技术社区  · 6 年前

    我有两个使用相同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运行并且editText1和editText2都更改后让TextWatcher做一些事情。 然而,我仍然想保持TextWatcher的“听”能力,然后手动将文本输入到这些编辑文本中。我怎样才能做到这一点?

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   AskNilesh    6 年前

    你可以试试这个

    您可以先设置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

    您需要注销 TextWatcher 当您使用 setText 和,然后根据您的要求重新注册。

        2
  •  0
  •   Zerato Sanjay Kumar    6 年前

    只需将布尔值创建为-

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