我有一個搜索字段,我想使用從兩個不同位置收集的數據自動填充數據:本地數據庫(sqlite)和遠程搜索API。我想立即顯示本地選項,然後暫停(以便在每次按鍵時不會發出API請求),請啓動API請求。將結果添加到可見的AutoCompleteTextArea下拉列表中
問題出現在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返回,那麼發生的只是我在下拉列表中獲得了一個滾動條。只要我滾動,用戶界面決定「哦,是的,有一個太空間」,並顯示它。
我試過我的AutoCompleteTextArea上的forceLayout()
和requestLayout()
以及notifyDataSetInvalidated()
。沒有骰子。
今天早上我有一個想法,也許現在的問題是,我正在使用Filter來獲取本地數據,但是接下來的API調用和add()調用都是從父類發生的。我可以重寫過濾器嗎?它可以完成所有工作? – Plutor 2011-02-04 12:53:54