Search code examples
androidautocompletetextview

How can I avoid autocomplete dropdown appearing when text is programmatically set?


I have an AutoCompleteTextView in my layout. I also have an alternative way to select the same items which are present in the AutoCompleteTextView. When the alternative way is selected, I populate the value in the AutoCompleteTextView via:

autoCompleteTextView.setText(valueFromAlternativeSource);

where valueFromAlternativeSource is one of the valid auto complete options. The trouble with this is that the autocomplete dropdown appears when setText is called. Putting the following line after the above doesn't work:

autoCompleteTextView.dismissDropDown();  //Doesn't work.  Why?

Any ideas on why dismiss dropdown isn't working or other ways I could dismiss the dropdown?


Solution

  • If you want to support API<17, Subclass AutoCompleteTextview and override setText(text, filter) method

    @Override
    public void setText(CharSequence text, boolean filter) {
        if(Build.VERSION.SDK_INT>=17) {
            super.setText(text, filter);
        }else{
            if(filter){
                setText(text);
            }else{
                ListAdapter adapter = getAdapter();
                setAdapter(null);
                setText(text);
                if(adapter instanceof ArrayAdapter)
                    setAdapter((ArrayAdapter) adapter);
                else
                    setAdapter((CursorAdapter) adapter);
                //if you use more types of Adapter you can list them here
            }
        }
    }
    

    Then whenever you want to set the text manually call setText(text, false)