我有自定义过滤器。
public void filter(String filter) {
Restau.clear();
if (filter != null && filter.trim().length() > 0) {
for (restauInfoDB element : tempRestList) {
if ( element.getOh().toLowerCase().contains(filter) ||element.getCost().toLowerCase().contains(filter) || element.getResname().toLowerCase().contains(filter) || element.getType().toLowerCase().contains(filter) || element.getResloc().toLowerCase().contains(filter))
Restau.add(element);
}
} else {
Restau.addAll(tempRestList);
}
super.notifyDataSetChanged();
}
该自定义过滤器仅过滤一个元素。例如,我搜索“汉堡”它只会在一个元素中过滤。我想过滤2个或更多单词,例如 “汉堡三星”我想过滤每一个有“汉堡”和“三星”的元素
Restau.add(element);
是CustomListView
答案 0 :(得分:0)
您可以使用列表尝试以下内容:
public void filter(List<String> filters) {
Restau.clear();
if (!filters.isEmpty())
{
for (restauInfoDB element : tempRestList) {
// Stuff the content into an array
List<String> contents = new ArrayList<>();
contents.add(element.getOh().toLowerCase());
contents.add(element.getCost().toLowerCase());
etc...
boolean matchAll = true;
for(String filter : filters) {
boolean matchFilter = false;
for(String content : contents) {
if (content.contains(filter)) {
matchFilter = true;
break;
}
}
// If this filter was not found, then set matchAll to false
if (!matchFilter) {
matchAll = false;
break;
}
}
if (matchAll)
Restau.add(element);
}
} else {
Restau.addAll(tempRestList);
}
super.notifyDataSetChanged();
}