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?
An editable text view that shows completion suggestions automatically while the user is typing. The list of suggestions is displayed in a drop down menu from which the user can choose an item to replace the content of the edit box with.
This defines the hint view displayed in the drop down menu. This defines the number of characters that the user must type before completion suggestions are displayed in a drop down menu. This is the View to anchor the auto-complete dropdown to.
This works fine for me and is less complex:
ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);
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)
Looks like its a problem of the order how messages are processed. My work around looks like this:
//autoCompleteTextView.dismissDropDown();
new Handler().post(new Runnable() {
public void run() {
autoCompleteTextView.dismissDropDown();
}});
autoCompleteTextView.setText(valueFromOtherMeans, filter);
* @param filter If <code>false</code>, no filtering will be performed
* as a result of this call.
My solution (but I don't like it, there must be something better):
autoCompleteTextView.setText(valueFromAlternativeSource);
autoCompleteTextView.setDropDownHeight(0);
autoCompleteTextView.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
autoCompleteTextView.setDropDownHeight(LayoutParams.WRAP_CONTENT);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With