Rxjava editText 实现searchview的功能
来源:互联网 发布:稳定的排序算法 编辑:程序博客网 时间:2024/06/06 02:19
最近学习Rxjava 自己实现一个searchView 的功能
1,限定用户操作时间,如一秒后才对数据的查询,避免无效的代码执行
2,利用Rxjava增加对数据的过滤操作,使用到的操作符debounce,filter….
为便于理解,本文从代码的执逻辑顺序写起
//初始化函数 EditText searchView; subject = PublishSubject.create();//对subject的一些初始,实行目的限定用户操作时间,如一秒后才对数据的查询,避免无效的代码执行,采用 PublishSubject.create()的函数即可作为订阅者也可作为被订阅者,操作函数:debounce,500毫秒内采取最后一次的操作 subject.debounce(500, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<CharSequence>() { @Override public void onCompleted() { } @Override public void onError(Throwable arg0) { } @Override public void onNext(CharSequence charSequence) { Log.d(TAG, "onNext" + charSequence.toString()); showSearchResult(charSequence); } }); //增加监听searchView.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { // Log.d(TAG, // "s.toString()"+s.toString()+",s.toString().trim().length()"+s.toString().trim().length()); if (s.toString().trim().length() > 0) { //执行查询的逻辑 subject.onNext(s); } } });
查询的函数
/** * 显示查询的结果 * * @param s * 搜索框中输入的字符 */ private void showSearchResult(CharSequence s) { if (s.toString().trim().length() == 0) { return; } //过滤list的函数 List<SessionBean> list = getPhoneListfilter(s); Log.d(TAG, "addtextwatcher list" + list.size()); if (list != null && list.size() > 0) { //显示listview } else { //显示数据为空时的界面 } }
过滤list的函数
使用操作符filter 过滤操作
/** * 根据搜索框的数据过滤号码和人名查询SessionBean * * @param s * @return */ protected List<SessionBean> getPhoneListfilter(final CharSequence s) { Log.d(TAG, "getPhoneListfilter"); final List<SessionBean> phoneList = new ArrayList<Bean>(); Observable.from(imSessionlist).filter(new Func1<Bean, Boolean>() { @Override public Boolean call(Bean bean) { return (bean.getPhoneName() != null && bean.getPhoneName().contains(s.toString())) || (bean.getPhoneNumber() != null && bean.getPhoneNumber().contains(s.toString())); } }).subscribe(new Action1<SessionBean>() { @Override public void call(SessionBean bean) { String phoneNum = bean.getPhoneNumber(); String phoneName = bean.getPhoneName(); int count = bean.getMessageCount(); SessionBean newBean = new SessionBean(); newBean.setPhoneName(phoneName); newBean.setPhoneNumber(phoneNum); newBean.setFileType(SessionBean.FILE_TYPE_TEXT_STRING); newBean.setMessageContent(count + "条信息 "); phoneList.add(newBean); } }); return phoneList; }
阅读全文
1 0
- Rxjava editText 实现searchview的功能
- actionBar+SearchView实现搜索功能
- SearchView+RecyclerView+GreenDao的搜索功能实现(1)
- SearchView+RecyclerView+GreenDao的搜索功能实现(2)
- SearchView+RecyclerView+GreenDao的搜索功能实现(2)
- Android EditText达到SearchView的效果
- SearchView的功能与使用
- Rxjava 实现接口回调的功能
- 应用Edittext实现搜索框的功能
- 自定义控件-实现带清空功能的EditText
- Android中SearchView的功能和用法
- 使用RxJava实现定时器功能
- Android SearchView结合Filter实现列表检索功能使用总结
- Android SearchView 实现一边输入一边搜索功能
- edittext SearchView 失去焦点问题
- EditText实现搜索过滤功能
- Android Edittext 清空按钮功能的实现
- 自定义Android的EditText实现仿淘宝登录功能
- 【总结】文字检测与识别资源
- 关于阿里云OSS上传以及下载的处理方法
- Windows安装配置theano,Python3.6
- 《简明Python教程》之基础
- DEV组件LookupEdit,ComboBoxEdit绑定数据源
- Rxjava editText 实现searchview的功能
- react-native 的 TabBarIOS 组件(底部选择器)
- 图像双线性插值
- awk统计各个接口调用次数
- @keyframes详解与实例
- 分组类控件(Panel)分组框控件(groupBox)和选项卡控件(TabControl)
- Request Payload 和 Form Data 的区别
- [转]WINDOWS下一个文件夹最多可以放多少个文件--终于找到答案了
- 【转】配置Log4j