Добавление результатов в видимый раскрывающийся список AutoCompleteTextArea - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть поле поиска, которое я хочу автозаполнить данными, которые я собираю из двух разных мест: локальной базы данных (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(). Без кубиков.

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

Пункты меню отображаются в отдельном макете, который связан с AutoCompleteTextView, но не является его частью.Вызов forceLayout() или requestLayout() для этого макета может сделать то, что вы ищете.

Вы также можете изменить высоту, вызвав getDropDownHeight в AutoCompleteTextView, добавивнекоторая сумма, а затем вызов setDropDownHeight с результатом.

0 голосов
/ 04 февраля 2011

Я понял это. Я просматривал исходный код AutoCompleteTextArea и заметил, что showDropDown() имеет логику для вычисления высоты и ширины и делает это, даже если выпадающее меню уже видно. Я попробовал это (в дополнение к notifyDataSetChanged()), и это сработало.

...