【发布时间】:2016-09-06 13:49:49
【问题描述】:
我有一个 adapter 扩展 RecyclerView.Adapter<RecyclerView.ViewHolder> 并实现 Filterable。
我的getFilter() 实现是:
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mPersonListFiltered = (List<Person>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<Person> filtered = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
results.count = mPersonList.size();
results.values = mPersonList;
} else {
String name, email, constr = Utils.removeDiacriticalMarks(constraint.toString());
for (Person person : mPersonList) {
name = Utils.removeDiacriticalMarks(person.getName().toLowerCase());
email = person.getEmail().toLowerCase();
if (name.contains(constr) || email.contains(constr)) {
filtered.add(person);
}
}
results.count = filtered.size();
results.values = filtered;
}
return results;
}
};
}
我希望在输入时过滤我的人员列表。如果我的列表大小不大于 1k,这可以正常工作,但如果我将其扩展到 5k、10k 等......它开始变得迟钝。而且我理解为什么,对于每个人,我都必须检查他们的姓名和电子邮件是否包含约束,这很糟糕。 但是我想知道在这种情况下,如果有很多条目,实现相同结果的最佳实现或替代方案是什么,换句话说,对于本地巨大列表和“即时”输入的快速过滤方法.
谢谢。
【问题讨论】:
-
您可以在适配器中创建方法,当按钮单击此方法将返回一个模型,并且您必须在定义适配器时重写此方法这是适配器中可过滤的最佳替代解决方案
标签: java android android-filterable