我有一个搜索字段,我希望自动完成从两个不同位置收集的数据:本地数据库(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()
。没有骰子。
答案 0 :(得分:1)
菜单条目显示在单独的布局中,该布局与AutoCompleteTextView相关联,但不是其中的一部分。在该布局上调用forceLayout()
或requestLayout()
可能会执行您正在寻找的内容。
您还可以通过调用AutoCompleteTextView上的getDropDownHeight
,向其添加一些金额,然后使用结果调用setDropDownHeight
来强制更改高度。
答案 1 :(得分:0)
我明白了。我正在查看AutoCompleteTextArea
source code,我注意到showDropDown()
具有计算高度和宽度的逻辑,即使下拉列表已经可见,它也会这样做。我尝试了它(除notifyDataSetChanged()
之外)并且它有效。