使用setText()不想调用textwatcher事件?

bha*_*191 3 android settext android-edittext android-textwatcher

我正在使用EditText.当我使用setText()时.TextWatcher事件正在调用.我不需要打电话吗?谁能帮我?

        txt_qty.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
Run Code Online (Sandbox Code Playgroud)

谢谢.

Anj*_*ali 6

您可以取消注册观察者,然后重新注册它.

要取消注册观察者,请使用以下代码:

txt_qty.removeTextChangedListener(yourTextWatcher);
Run Code Online (Sandbox Code Playgroud)

重新注册它使用此代码:

txt_qty.addTextChangedListener(yourTextWatcher);
Run Code Online (Sandbox Code Playgroud)

或者,您可以设置一个标志,以便您的观察者知道您何时自己更改了文本(因此应该忽略它).

在您的活动中定义一个标志是:boolean isSetInitialText = false;

当你 在调用set text之前调用txt_qty.settext(yourText) make 时isSetInitialText = true,

然后将您的观察者更新为:

txt_qty.addTextChangedListener(new TextWatcher() {
            @Override 
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
          if (isSetInitialText){
                isSetInitialText = false;
          } else{
                  // perform your operation
          }

            @Override 
            public void onTextChanged(CharSequence s, int start, int before, int count) {
              if (isSetInitialText){
                   isSetInitialText = false;
               } else{
                 // perform your operation
               }
            } 

            @Override 
            public void afterTextChanged(Editable s) {
                 if (isSetInitialText){
                      isSetInitialText = false;
                 } else{
                     // perform your operation
                 }
            } 
        }); 
Run Code Online (Sandbox Code Playgroud)