将结果添加到可见的AutoComplete TextArea下拉列表中

时间:2011-02-04 01:28:45

标签: android user-interface asynchronous autocomplete

我有一个搜索字段,我希望自动完成从两个不同位置收集的数据:本地数据库(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)时,新结果会被添加到下拉列表的底部。不幸的是,下拉列表的 height 不会改变。如果在API请求之前有两个结果,并且一个从API返回,那么所有发生的事情就是我在下拉列表中得到一个滚动条。当我滚动时,UI决定“哦,是的,那个也有空间”并显示它。

我在我的AutoCompleteTextArea以及forceLayout()上尝试了requestLayout()notifyDataSetInvalidated()。没有骰子。

2 个答案:

答案 0 :(得分:1)

菜单条目显示在单独的布局中,该布局与AutoCompleteTextView相关联,但不是其中的一部分。在该布局上调用forceLayout()requestLayout()可能会执行您正在寻找的内容。

您还可以通过调用AutoCompleteTextView上的getDropDownHeight,向其添加一些金额,然后使用结果调用setDropDownHeight来强制更改高度。

答案 1 :(得分:0)

我明白了。我正在查看AutoCompleteTextArea source code,我注意到showDropDown()具有计算高度和宽度的逻辑,即使下拉列表已经可见,它也会这样做。我尝试了它(除notifyDataSetChanged()之外)并且它有效。