Я дергал себя за волосы несколько дней, я пытаюсь настроить autocompletetextview в android, где пользователь вводит ключ, а предложения автозаполнения являются значениями, однако я пробовал это примерно 10 различными способами сейчас, расширяя BaseAdapter, SimpleAdapter, а теперь и ArrayAdapter, и я заметил через отладчик, что мой набор результатов в порядке, однако я действительно понятия не имею, что я должен делать в разделе кода publishResults (). Первый аргумент - это настраиваемый элемент управления autocompletetextview, использующий следующий XML:
<?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>
и класс выглядит так:
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 конструктор, общедоступный NewArrayAdapter (контекст контекста, ресурс int, int textViewResourceId, объекты списка) второй аргумент - это autocompletetextview, третий - вложенный TextView, а четвертый - это ссылка на список, который я могу только предположить, это то, что в конечном итоге должен быть набор результатов, но, видимо, нет ... это сводит меня с ума, есть ли у кого-нибудь предложения? Моя основная проблема заключается в том, что результаты должны основываться на ключе, а не на значении, например ввод "a" может означать результат "пустых болтовни" за то, что я пытаюсь сделать здесь, любая информация была бы отличной, большое спасибо