Android AutoCompleteTextView sugiere alternativa
es posible tener un AutoCompleteTextView, que busca una cadena, pero sugiere una cadena alternativa?
Por ejemplo, si el usuario escribe 'Yau' o 'yauh', sugeriría 'Yáuh' para que el usuario no tenga que escribir caracteres especiales.
- Cómo obtener el ID correcto del adaptador AutoCompleteTextView
- Cómo mostrar las sugerencias de AutoCompleteTextView en orientación horizontal
- Cómo deshabilitar el corrector ortográfico para Android AutoCompleteTextView?
- AutoCompleteTextView setError
- Java.lang.NullPointerException - AutoCompleteTextView - HoneyComb
- Android: AutoCompleteTextView margen superior en ListView
- Autocompletar con nombre y número como en aplicaciones de sms nativas Android
- Texto sobrepuesto de Android en el adaptador
- Cómo encontrar la posición del elemento en un AutoCompletetextview lleno de matriz
- Android AutoCompleteTextView muestra información de objeto en lugar de texto en modo horizontal
- AutoCompleteTextView.isPopupShowing () siempre es FALSO
- Problema de AutoCompleteText obtener valores repetidos en la lista?
- ¿Cómo comprobar el estado dropDown (mostrado u ocultado) en autoCompleteTextView?
He tenido un ir en la ampliación de ArrayAdapter, pero deosn't parece ser sobrescribir:
import java.util.ArrayList; import java.util.List; import android.content.Context; import android.widget.ArrayAdapter; import android.widget.Filter; import android.widget.Filterable; public class foreignAdapter<T> extends ArrayAdapter implements Filterable { String temp; String word; private List<T> mObjects; private final Object mLock = new Object(); private ArrayList<T> mOriginalValues; public foreignAdapter(Context context, int resource, T[] object) { super(context, resource, object); } private class ArrayFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence prefix) { FilterResults results = new FilterResults(); if (mOriginalValues == null) { synchronized (mLock) { mOriginalValues = new ArrayList<T>(mObjects); } } if (prefix == null || prefix.length() == 0) { synchronized (mLock) { ArrayList<T> list = new ArrayList<T>(mOriginalValues); results.values = list; results.count = list.size(); } } else { String prefixString = prefix.toString().toLowerCase(); final ArrayList<T> values = mOriginalValues; final int count = values.size(); final ArrayList<T> newValues = new ArrayList<T>(count); for (int i = 0; i < count; i++) { final T value = values.get(i); final String valueText = value.toString().toLowerCase(); /* Run for each character in the string */ for(int j=0;j<valueText.length();j++) { switch(valueText.charAt(j)) { case 'á': case 'ā': case 'à': temp+='a'; break; case 'í': case 'ī': case 'ì': temp+='i'; break; case 'è': case 'ē': case 'é': temp+='e'; break; case 'ó': case 'ō': case 'ò': temp+='o'; break; case 'ú': case 'ū': case 'ù': temp+='u'; break; case 'ģ': temp+='g'; break; default: temp+=word.charAt(j); break; } } // First match against the whole, non-splitted value if (temp.startsWith(prefixString)) { newValues.add(value); } else { final String[] words = temp.split(" "); final int wordCount = words.length; for (int k = 0; k < wordCount; k++) { if (words[k].startsWith(prefixString)) { newValues.add(value); break; } } } } results.values = newValues; results.count = newValues.size(); } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { //noinspection unchecked mObjects = (List<T>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } }
No he probado esto pero esto seguramente lo hará …
Usted no ha especificado si sus datos están en una matriz o un DB así que voy a asumir una matriz (o una lista).
getFilter()
el getFilter()
de su adaptador. (Marque esta pregunta para ver cómo)
Ahora, en ese ejemplo (en el enlace) el autor usa startsWith
para filtrar los resultados. En su lugar, tendrás que usar tu propio método de comparación que considere también esos caracteres especiales. (como en, iguale á
con a
)
Hay el AutoCompleteTextView, así que supongo que eso es lo que necesitas:
<AutoCompleteTextView android:id="@+id/autoCompleteTextView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="MyAutoCompleteTextView" > </AutoCompleteTextView>
Aquí está la información oficial: AutoCompleteTextView
Acabo de ver que incluso hay un tutorial, Tutorial de AutoCompleteTextView