Android: AutoCompleteTextView muestra sugerencias cuando no se introduce ningún texto

Estoy usando AutoCompleteTextView , cuando el usuario hace clic en él, quiero mostrar sugerencias, incluso si no tiene texto – pero setThreshold(0) funciona exactamente igual que setThreshold(1) – por lo que el usuario tiene que introducir al menos 1 carácter para mostrar Las sugerencias.

Se trata de un comportamiento documentado : "Cuando el umbral es menor o igual a 0, se aplica un umbral de 1".

Puede mostrar manualmente el menú desplegable a través de showDropDown() , así que tal vez usted puede arreglar para mostrarlo cuando lo desee. O subclase AutoCompleteTextView y reemplazar enoughToFilter() , devolviendo true todo el tiempo.

Aquí está mi clase – lo llamo InstantAutoComplete. Es algo entre AutoCompleteTextView y Spinner.

 import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.widget.AutoCompleteTextView; public class InstantAutoComplete extends AutoCompleteTextView { public InstantAutoComplete(Context context) { super(context); } public InstantAutoComplete(Context arg0, AttributeSet arg1) { super(arg0, arg1); } public InstantAutoComplete(Context arg0, AttributeSet arg1, int arg2) { super(arg0, arg1, arg2); } @Override public boolean enoughToFilter() { return true; } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused && getAdapter() != null) { performFiltering(getText(), 0); } } } 

Utilícelo en su xml como este:

 <your.namespace.InstantAutoComplete ... /> 

La manera más fácil:

Sólo use setOnTouchListener y showDropDown ()

 AutoCompleteTextView text; ..... ..... text.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event){ text.showDropDown(); return false; } }); 

El código de Destil funciona muy bien cuando sólo hay un objeto InstantAutoComplete . No funcionó con dos sin embargo – ni idea de por qué. Pero cuando pongo showDropDown() (al igual que CommonsWare aconsejado) en onFocusChanged() así:

 @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused) { performFiltering(getText(), 0); showDropDown(); } } 

Resolvió el problema.

Son sólo las dos respuestas correctamente combinadas, pero espero que pueda salvar a alguien algún tiempo.

La respuesta de Destil arriba casi funciona, pero tiene un insecto sutil. Cuando el usuario primero da el foco al campo que trabaja, sin embargo, si se van y luego regresan al campo no mostrará el menú desplegable porque el valor de mPopupCanBeUpdated seguirá siendo falso desde cuando estaba oculto. La solución consiste en cambiar el método onFocusChanged a:

 @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused) { if (getText().toString().length() == 0) { // We want to trigger the drop down, replace the text. setText(""); } } } 

Puede utilizar onFocusChangeListener;

 TCKimlikNo.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { TCKimlikNo.showDropDown(); } } }); 

El adaptador no realiza el filtrado inicialmente.
Cuando no se realiza el filtrado, la lista desplegable está vacía.
Por lo que puede ser que tenga que conseguir el filtrado que va inicialmente.

Para ello, puede invocar filter() después de terminar de agregar las entradas:

 adapter.add("a1"); adapter.add("a2"); adapter.add("a3"); adapter.getFilter().filter(null); 

Para hacer CustomAutoCompleteTextView. 1. reemplazar setThreshold, enoughToFilter, onFocusChanged método

 public class CustomAutoCompleteTextView extends AutoCompleteTextView { private int myThreshold; public CustomAutoCompleteTextView (Context context) { super(context); } public CustomAutoCompleteTextView (Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public CustomAutoCompleteTextView (Context context, AttributeSet attrs) { super(context, attrs); } //set threshold 0. public void setThreshold(int threshold) { if (threshold < 0) { threshold = 0; } myThreshold = threshold; } //if threshold is 0 than return true public boolean enoughToFilter() { return true; } //invoke on focus protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { //skip space and backspace super.performFiltering("", 67); // TODO Auto-generated method stub super.onFocusChanged(focused, direction, previouslyFocusedRect); } protected void performFiltering(CharSequence text, int keyCode) { // TODO Auto-generated method stub super.performFiltering(text, keyCode); } public int getThreshold() { return myThreshold; } } 

Simplemente llame a este método al tocar o hacer clic en evento de autoCompleteTextView o donde desee.

 autoCompleteTextView.showDropDown() 

intentalo

  searchAutoComplete.setThreshold(0); searchAutoComplete.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {//cut last probel if (charSequence.length() > 1) { if (charSequence.charAt(charSequence.length() - 1) == ' ') { searchAutoComplete.setText(charSequence.subSequence(0, charSequence.length() - 1)); searchAutoComplete.setSelection(charSequence.length() - 1); } } } @Override public void afterTextChanged(Editable editable) { } }); //when clicked in autocomplete text view @Override public void onClick(View view) { switch (view.getId()) { case R.id.header_search_etv: if (searchAutoComplete.getText().toString().length() == 0) { searchAutoComplete.setText(" "); } break; } }): 

Esto funcionó para mí, pseudo código:

  public class CustomAutoCompleteTextView extends AutoCompleteTextView { public CustomAutoCompleteTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean enoughToFilter() { return true; } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused) { performFiltering(getText(), 0); } } @Override public boolean onTouchEvent(MotionEvent event) { this.showDropDown(); return super.onTouchEvent(event); } } 

Simplemente pegue esto en su método onCreate en Java

 final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>( this, android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.Loc_names)); textView1 =(AutoCompleteTextView) findViewById(R.id.acT1); textView1.setAdapter(arrayAdapter); textView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View arg0) { textView1.setMaxLines(5); textView1.showDropDown(); } }); 

Y esto a su archivo Xml …

 <AutoCompleteTextView android:layout_width="200dp" android:layout_height="30dp" android:hint="@string/select_location" android:id="@+id/acT1" android:textAlignment="center"/> 

Y crear un Array en string.xml en Valores …

 <string-array name="Loc_names"> <item>Pakistan</item> <item>Germany</item> <item>Russia/NCR</item> <item>China</item> <item>India</item> <item>Sweden</item> <item>Australia</item> </string-array> 

Y tú eres bueno para ir.

  • Android AutoCompleteTextView sugiere alternativa
  • ¿Cómo puedo evitar que el menú desplegable de autocompletado aparezca cuando el texto esté programado?
  • Sugerencias de AutoCompleteTextView en modo horizontal
  • AutoCompleteTextView no completar palabras entre paréntesis
  • Estilo en la lista desplegable AutoCompleteTextView
  • AutoCompleteTextView no muestra ningún elemento desplegable
  • Cómo deshabilitar el corrector ortográfico para Android AutoCompleteTextView?
  • Diacríticos / caracteres internacionales en AutoCompleteTextView
  • ¿Cuál es la diferencia entre EditText y AutoCompleteTextView en Android?
  • Android- Problema con reemplazo de tamaño de imagen en versiones android diferentes para el texto MultiAutoCompleteTextview
  • AutocompleteTextView con sugerencias asíncronas no muestra desplegable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.