Filterable的使用
过滤器接口
使用
在列表中使用
通过添加过滤条件,刷新符合条件的数据并显示。在列表中,通常都是在适配器实现Filterable
接口,并重写getFilter
方法。如下是getFilter
方法的一个案例
@Override
public Filter getFilter() {
return new Filter() {
//执行过滤,在这里指明过滤条件
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterStr = constraint.toString();
if (filterStr.isEmpty()) {
mFilterBeans = mBeanList;
} else {
mFilterBeans.clear();
for (FilterBean bean : mBeanList) {
//如果字符串是否以指定的前缀开始,那么就是想要的结果
if (bean.getFood().startsWith(filterStr)) {
mFilterBeans.add(bean);
}
}
}
FilterResults results = new FilterResults();
results.values = mFilterBeans;
return results;
}
//发布过滤后的结果
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilterBeans = (ArrayList<FilterBean>) results.values;
notifyDataSetChanged();
}
};
}
在其适配器构造器中,有如下实现:
public FilterAdapter(Context context, List<FilterBean> beanList) {
mContext = context;
mBeanList = beanList;//原始数据
mFilterBeans = new ArrayList<>(beanList);//过滤源
}
整个过程要注意数据源和过滤后的源,他们最好不能是同一个,或者是同一个引用。在筛选过程中,都是通过筛选数据源里的数据,并一一添加进过滤数据源,保存最初的数据“范本”,才能在多次筛选中得到正确的没有遗漏的数据。当然,在适配器中,在这里展现的是过滤源的数据,所以在onBindViewHolder
和getItemCount
都是使用过滤源
@Override
public int getItemCount() {
return mFilterBeans != null ? mFilterBeans.size() : 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。