这是我最终会做的代码(感谢@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