【发布时间】:2019-08-01 08:44:11
【问题描述】:
三个输入框同时过滤列表有简单的解决方案吗?
要求是3个搜索字段同时显示和激活,然后用户可以立即搜索三个字段中的任何一个。每次搜索都会自动缩小结果范围。
这个问题有什么算法或解决方案吗?
提前致谢。
【问题讨论】:
标签: android search filter recyclerview-layout
三个输入框同时过滤列表有简单的解决方案吗?
要求是3个搜索字段同时显示和激活,然后用户可以立即搜索三个字段中的任何一个。每次搜索都会自动缩小结果范围。
这个问题有什么算法或解决方案吗?
提前致谢。
【问题讨论】:
标签: android search filter recyclerview-layout
试试这个,它对我有用 在你的 getFilter 方法中
if (androidVersion.name()(your 1st field).toLowerCase().contains(charString)
|| androidVersion.id()(your 2nd field).toLowerCase().contains(charString)
|| androidVersion.number()(your 3rd field).toLowerCase().contains(charString)
{
filteredList.add(androidVersion);
}
【讨论】:
在你的适配器类中
private ArrayList<MyBean> videoList;//your arrayList
private ArrayList<MyBean> vList;//new list for search view
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
videoList = vList;
} else {
ArrayList<MyBean> filteredList = new ArrayList<>();
for (MyBean androidVersion : vList) {
//you can add your field here
if (androidVersion.name()/*(your 1st field)*/.toLowerCase().contains(charString)
|| androidVersion.id()/*(your 2nd field)*/.toLowerCase().contains(charString)
|| androidVersion.number()/*(your 3rd field)*/.toLowerCase().contains(charString))
{
filteredList.add(androidVersion);
}
}
videoList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = videoList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
videoList = (ArrayList<MyBean>) filterResults.values;
notifyDataSetChanged();
}
};
}
【讨论】: