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;
}
相關文章
相關標籤/搜索