先很多情况下列表因为数据多都会有一个搜索的功能,有些搜索需要点击搜索才能去筛选,下面做一个根据输入框的数据去自动搜索
1、获取到控件
@BindView(R.id.et_search_for) EditText mEtSearchFor;
2、通过Rxjava提供的方法做模糊搜索
/** * 模糊搜索 */ RxTextView.textChanges(mEtSearchFor) //绑定EditText .skip(1) .debounce(SystemConstant.RxConstant.DEBOUNCE_TIME, TimeUnit.MILLISECONDS) .filter(new Predicate<CharSequence>() { @Override public boolean test(CharSequence charSequence) throws Exception { return charSequence.toString().trim().length() >= 0; } }).observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new Observer<CharSequence>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(CharSequence charSequence) { souSuoList.clear(); //获取到输入框的数据 String trim = charSequence.toString().trim(); //判断输入框的数据是否为空 if (!trim.equals("")) { //如果不为空,那就遍及整个列表 for (int i = 0; i < setBaseReponse1.size(); i++) { //这个是根据什么字段做筛选 String s = setBaseReponse1.get(i).getTaskName() + setBaseReponse1.get(i).getTaskNumber(); //这个是判断输入的数据是否再这个字段里面 int i1 = s.toUpperCase().indexOf(trim.toUpperCase()); if (i1 != -1) { //如果有就重新存到一个List集合里面 souSuoList.add(setBaseReponse1.get(i)); } } //重新给列表赋值 刷新数据 tackListAdapter.setSetBaseReponse1(souSuoList); mRv.setAdapter(tackListAdapter); } else { //判断如果输入框为空就直接用之前的list做数据渲染 tackListAdapter.setSetBaseReponse1(setBaseReponse1); mRv.setAdapter(tackListAdapter); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } });
这样一个模糊查询就可以使用了