У меня есть поле поиска, которое я хочу автозаполнить данными, которые я собираю из двух разных мест: локальной базы данных (sqlite) и API удаленного поиска. Я хотел бы немедленно отобразить локальные параметры, а затем после паузы (чтобы я не делал запросы API при каждом нажатии клавиш) запускаю запрос API.
Проблема возникает, когда возвращается запрос API. Как добавить эти записи в (уже видимый) раскрывающийся список для AutoCompleteTextArea
? Сейчас у меня есть класс, который расширяет BaseAdapter
:
private class MyAutoCompleteAdapter extends BaseAdapter implements Filterable {
private List<String> resultList;
private MySearchFilter filter;
public BeerAutoCompleteAdapter() {
super();
results = new ArrayList<String>();
filter = new MySearchFilter();
}
// getView, getCount, getItem overridden
private void add(String newResult) {
results.add(newResult);
notifyDataSetChanged();
}
private class MySearchFilter extends Filter {
// performFiltering and publishResults overridden
}
}
Все работает на 90%. Когда я звоню add(newResult)
, новый результат добавляется в конец выпадающего списка. К сожалению, высота раскрывающегося списка не меняется. Если до запроса API было два результата и один из них возвращается из API, все, что происходит, - это то, что я получаю полосу прокрутки в раскрывающемся списке. Как только я прокручиваю, пользовательский интерфейс решает «о, да, для этого тоже есть место» и показывает это.
Я пробовал forceLayout()
и requestLayout()
на моем AutoCompleteTextArea, а также notifyDataSetInvalidated()
. Без кубиков.