androidandroid-edittextautocompletetextview

How can I avoid execution of onTextChanged in Android's EditText


How can I avoid that a code line like:

((EditText) findViewById(R.id.MyEditText)).setText("Hello");

Will cause an event here:

((EditText) findViewById(R.id.MyEditText)).addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
    int before, int count) {
// HERE
}

@Override
public void beforeTextChanged(CharSequence s, int start,
    int count, int after) {
}

@Override
public void afterTextChanged(Editable s) {
}
});

I want to know if there is any way to inhibit the execution of onTextChanged as I noticed in the case of selecting a AutoCompleteTextView's dropdown result (no onTextChanged is executed!).

I'm not seeking for workarounds like "if hello do nothing"...


Solution

  • The Source for AutoCompleteTextView shows that they set a boolean to say the text is being replaced by the block completion

             mBlockCompletion = true;
             replaceText(convertSelectionToString(selectedItem));
             mBlockCompletion = false;    
    

    This is as good a way as any to achieve what you want to do. The TextWatcher then checks to to see if the setText has come via a completion and returns out of the method

     void doBeforeTextChanged() {
         if (mBlockCompletion) return;
    

    Adding and removing the TextWatcher will be more time consuming for the application