這是我最終會做的代碼(感謝@Luksprog):
public void afterTextChanged(Editable s) {
if(s.length()>0){
int count = viewListAdapter.getCount();
if(count > 0){
hashMapListForListViewcopy.clear();
for (int i = 0; i < count; i++) {
Map temp = (Map) viewListAdapter.getItem(i);
String txtOfferName = temp.get("txtOfferName").toString();
HashMap<String, String> entitiesHashMap;
entitiesHashMap = new HashMap<String, String>();
if (txtOfferName.toLowerCase().contains(s.toString().toLowerCase())) {
System.out.println("Found a match!");
Log.v("txtOfferName", txtOfferName);
Log.v("viewListAdapter.getItem(i)","" + viewListAdapter.getItem(i));
entitiesHashMap = (HashMap<String, String>) viewListAdapter.getItem(i);
hashMapListForListViewcopy.add(entitiesHashMap);
}
}
}
viewListAdaptercopy.notifyDataSetChanged();
}
爲'SimpleAdapter'過濾器檢查所有從各行的'Map'列在默認情況下,所以你需要提供你的自己的過濾器,只用於過濾你想要的列。 – Luksprog
謝謝@Luksprog。我最終做到了這一點。基本上在textwatcher的afterTextChanged方法上連接了一個手動過濾器。所述過濾器遍歷整個列表視圖元素並選擇那些匹配的列表視圖元素。 notifydatasetchanged然後重置列表視圖。剛剛讓我再想一想,如果這是最好的方法,或者我應該使用不同的適配器。 –
這(可能如果你測試)的作品,但它不是最好的方式。最好的方法是創建自己的'SimpleAdapter'並覆蓋'getFilter()'方法來返回一個自定義的'Filter',它可以像你想要的那樣過濾列表。這樣做的主要原因是存在後臺線程來進行過濾。 – Luksprog