Filterable的使用

Filterable的使用

过滤器接口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);//过滤源
}

整个过程要注意数据源和过滤后的源,他们最好不能是同一个,或者是同一个引用。在筛选过程当中,都是经过筛选数据源里的数据,并一一添加进过滤数据源,保存最初的数据“范本”,才能在屡次筛选中获得正确的没有遗漏的数据。固然,在适配器中,在这里展示的是过滤源的数据,因此在onBindViewHoldergetItemCount都是使用过滤源接口

@Override
public int getItemCount() {
    return mFilterBeans != null ? mFilterBeans.size() : 0;
}
相关文章
相关标签/搜索