我有一个adapter
,它扩展了并实现了Filterable
。使用RecyclerView.Adapter过滤很多条目
我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等等,它开始变得迟缓。而且我明白为什么,对于每个我必须检查是否包含他们的姓名和电子邮件限制的人来说,这太可怕了。 但是我想知道在这种情况下,是否有很多条目,为达到相同结果,最好的实现或替代方案是什么,换句话说,本地巨大列表的快速过滤方法和“即时”打字。
谢谢。
您可以在适配器上的方法创建,当按钮点击这个方法会返回一个模型,这种方法,当你定义适配器 必须覆盖这是适配器中可过滤的最佳替代解决方案 –