列表、网格等多条目数据控件在内存中实现过滤(筛选)
2016-10-18 11:19
337 查看
第一步:Adapter中实现Filterable接口(该接口通常是在Adapter中使用)
第二步 自定义过滤器(见上面代码WaybillFilter)
第三步 调用
第四步 在回调中处理结果
public class ExceptionWaybillAdapter extends BaseAdapter<ExceptionWaybill> implements Filterable { private WaybillFilter filter; private OnFilterListener onFilterListener; @Override public Filter getFilter() { if (filter == null) { filter = new WaybillFilter(mDatas); } return filter; } /** * 异步过滤器 */ private class WaybillFilter extends Filter { private List<ExceptionWaybill> originList; public WaybillFilter(List<ExceptionWaybill> originList) { this.originList = new ArrayList<>(); this.originList.addAll(originList); } //子线程中调用 @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (StringUtils.isEmpty(constraint)) { List<ExceptionWaybill> list = new ArrayList<>(originList); results.values = list; results.count = list.size(); } else { List<ExceptionWaybill> list = new ArrayList<>(); for (ExceptionWaybill waybill : originList) { if (waybill.getWaybill().startsWith(constraint.toString())) { list.add(waybill); } } results.values = list; results.count = list.size(); } return results; } //UI线程中调用 @Override protected void publishResults(CharSequence constraint, FilterResults results) { List<ExceptionWaybill> newList = (List<ExceptionWaybill>) results.values; //匹配到数据 if (results.count > 0 && onFilterListener != null) { onFilterListener.onFilterSuccess(newList); } //没有匹配到数据 if (constraint.length() > 0 && results.count == 0 && onFilterListener != null) { onFilterListener.onFilterNoData(); } } } public void setOnFilterListener(OnFilterListener onFilterListener) { this.onFilterListener = onFilterListener; } public interface OnFilterListener { void onFilterSuccess(List<ExceptionWaybill> newList); void onFilterNoData(); } }
第二步 自定义过滤器(见上面代码WaybillFilter)
第三步 调用
//EditText中监听的事件TextWatcher @Override public void afterTextChanged(Editable s) { String waybill = s.toString().trim(); adapter.getFilter().filter(waybill); }
第四步 在回调中处理结果
@Override public void onFilterSuccess(List<ExceptionWaybill> newList) { rvExceptionWaybill.setVisibility(View.VISIBLE); tvSearchTips.setVisibility(View.GONE); adapter.setmDatas(newList); } @Override public void onFilterNoData() { rvExceptionWaybill.setVisibility(View.GONE); tvSearchTips.setVisibility(View.VISIBLE); }
相关文章推荐
- NET WinForm程序中给DataGridView表头添加下拉列表实现数据过滤【转载】
- 实现类型化的数据绑定(列表)控件
- 我的ASPxGridView控件的数据是在后台绑定的,但是实现不了筛选和分页的功能,只能显示一页的数据?
- RecyclerView条目跳转+SpringView数据刷新加载+MVP+OKhttp+拦截器+自定义view 实现请求网络数据的二级列表购物车
- 利用ligerUI实现类似数据列表过滤展示,类似JQuery datatable和某些框架的dataGrid
- 在ASP.NET中不用服务器控件来实现查询所有的数据列表
- 在DataGridView控件上实现列标头象Excel带数据筛选功能
- Android联系人列表,实现ListView的A-Z字母排序和过滤搜索功能,字母条目上顶
- C#操作DataTable方法实现过滤、取前N条数据及获取指定列数据列表的方法
- 列表删除功能中条目控件的简易实现
- Asp.Net Ajax+WCF Service+ADO.NET Entity Framework实现数据列表,数据筛选,分页,排序,删除
- 用PictureEx类实现内存图片数据直接显示于picture控件
- Aspose Cells 控件如何实现数据过滤(附代码和下载地址)
- TreeList控件实现数据过滤功能
- Asp.Net Ajax+WCF Service+ADO.NET Entity Framework实现数据列表,数据筛选,分页,排序,删除
- Repeater控件实现点击列表行单元格.在该行下方显示数据
- 实现列表数据的过滤
- TREELIST控件实现数据过滤功能
- yii2使用gridView实现下拉列表筛选数据
- .NET WinForm程序中给DataGridView表头添加下拉列表实现数据过滤