android - una - ¿Cómo puedo evitar que aparezca el menú desplegable de autocompletar cuando el texto se establece mediante programación?
lista desplegable excel con valores asociados (5)
Tengo un Autocompletar texto siguiente en mi diseño. También tengo una forma alternativa de seleccionar los mismos elementos que están presentes en AutoTompletarTextView. Cuando se selecciona la forma alternativa, relleno el valor en AutoCompleteTextView a través de:
autoCompleteTextView.setText(valueFromAlternativeSource);
donde valueFromAlternativeSource
es una de las opciones de autocompletar válidas. El problema con esto es que el menú desplegable de autocompletar aparece cuando se llama a setText. Poner la siguiente línea después de lo anterior no funciona:
autoCompleteTextView.dismissDropDown(); //Doesn''t work. Why?
¿Alguna idea sobre por qué descartar el menú desplegable no funciona u otras formas en que podría descartar el menú desplegable?
Esto funciona bien para mí y es menos complejo:
ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);
Mi solución (pero no me gusta, debe haber algo mejor):
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);
}
}
Parece que es un problema del orden en que se procesan los mensajes. Mi trabajo alrededor se ve así:
//autoCompleteTextView.dismissDropDown();
new Handler().post(new Runnable() {
public void run() {
autoCompleteTextView.dismissDropDown();
}});
Si desea admitir API <17, Subclase Autocompletar vista de texto y anular el método setText(text, filter)
@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
}
}
}
Luego, cuando quiera configurar el texto, llame a setText(text, false)
autoCompleteTextView.setText(valueFromOtherMeans, filter);
* @param filter If <code>false</code>, no filtering will be performed
* as a result of this call.