he estado tirando de mi cabello durante unos días, estoy tratando de configurar una vista autocompletar en Android donde el usuario ingresa una clave y las sugerencias de autocompletar son los valores, sin embargo, he intentado esto de 10 maneras diferentes ahora , extendiendo BaseAdapter, SimpleAdapter y ahora ArrayAdapter, y he notado a través del depurador que mi conjunto de resultados está bien, sin embargo, realmente no tengo idea de lo que se supone que debo hacer en la sección publishResults() del código. El primer argumento es la costumbre de control AutoCompleteTextView usando el siguiente código XML:reemplazando resultados de filtro en android autocompletetextview?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/txtInnerView2" android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
y la clase es el siguiente:
public class NewArrayAdapter<T> extends ArrayAdapter implements Filterable {
ArrayList<String> allWords;
ArrayList<String> resultWords;
String value[] = { "Awesome", "Bear", "Cat", "Dog" };
String key[] = { "A", "B", "C", "D" };
public NewArrayAdapter(Context context, int resource, int textViewResourceId) {
super(context, resource, textViewResourceId);
// TODO Auto-generated constructor stub
allWords = new ArrayList<String>();
resultWords = new ArrayList<String>();
}
@Override
public Filter getFilter() {
Filter custom_filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults f = new FilterResults();
if (constraint != null) {
ArrayList<String> lstResults = new ArrayList<String>();
for (int x = 0; x < key.length; x++) {
if (key[x].startsWith(constraint.toString().toUpperCase())) {
lstResults.add(value[x]);
}
}
f.values = lstResults;
f.count = lstResults.size();
}
return f;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
resultWords.clear();
if (results.count > 0) {
resultWords.addAll((Collection<? extends String>) results.values);
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};
return custom_filter;
}
}
int el constructor, NewArrayAdapter pública (contexto Contexto, recursos, int textViewResourceId, Objetos de lista) el segundo argumento es la vista autocompletetext, el tercero es el TextView anidado, y el 4to es una referencia a la lista que solo puedo suponer es lo que eventualmente debería ser el resultado, pero aparentemente no es ... esto es volviendo loco, ¿alguien tiene alguna sugerencia? Mi problema principal es que los resultados deben basarse en la clave, no en el valor, p. escribir "a" podría significar un resultado de "tiddlywinks" por lo que estoy tratando de hacer aquí cualquier información sería genial, muchas gracias
Sé que esto es de dos años, pero la función debe ser llamada para que coincida con filterlist someAdapter.filterList (secuencia); – Mike