您的位置:首页 > 其它

列表、网格等多条目数据控件在内存中实现过滤(筛选)

2016-10-18 11:19 337 查看
第一步:Adapter中实现Filterable接口(该接口通常是在Adapter中使用)

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网格 filter list 筛选
相关文章推荐