过滤器接口ide
经过添加过滤条件,刷新符合条件的数据并显示。在列表中,一般都是在适配器实现Filterable
接口,并重写getFilter
方法。以下是getFilter
方法的一个案例code
@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(); } }; }
在其适配器构造器中,有以下实现:orm
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; }