Filterable的使用

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

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

@Override
public int getItemCount() {
    return mFilterBeans != null ? mFilterBeans.size() : 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值