EditText 做实时列表搜索

先很多情况下列表因为数据多都会有一个搜索的功能,有些搜索需要点击搜索才能去筛选,下面做一个根据输入框的数据去自动搜索

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() {
            @Override
            public boolean test(CharSequence charSequence) throws Exception {
                return charSequence.toString().trim().length() >= 0;
            }
        }).observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new Observer() {
            @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() {

            }
        });

这样一个模糊查询就可以使用了

你可能感兴趣的:(Android,控件)