Rxjava editText 实现searchview的功能
2017-06-22 17:49
429 查看
最近学习Rxjava 自己实现一个searchView 的功能
1,限定用户操作时间,如一秒后才对数据的查询,避免无效的代码执行
2,利用Rxjava增加对数据的过滤操作,使用到的操作符debounce,filter….
为便于理解,本文从代码的执逻辑顺序写起
查询的函数
过滤list的函数
使用操作符filter 过滤操作
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; }
相关文章推荐
- EditView替代TextView实现复制粘贴功能。(参考网上的)
- EditText+RecycleView实现搜索功能之一:对EditText内容变化实时监听
- 实现:TextView自由复制功能
- 实现:TextView自由复制功能
- [Android] TextView 分页功能的实现
- listview获取edittext中输入的数据,显示,并且实现可删除功能
- 使用TextWatcher实现EditText与TextView同步
- 使用TextWatcher实现EditText与TextView同步
- 使用AutoCompleteTextView和SharePreference实现搜索历史自动提示功能
- (android实战)实现【关于我们】功能(textview的文本样式几种实现方式)
- Android开发 TextView文字复制功能(类似EditText)
- android自定义View之自定义EditText(添加删除功能)
- TextView滚动功能的实现
- android 倒计时、有清除功能编辑框、popupwindow、跑马灯效果实现(基于TextView)
- Android Edittext 清空按钮功能的实现
- Android UI设计之<三>自定义EditText,实现带清除功能的输入框
- TextView滚动功能的实现
- 实现【关于我们】功能(textview的文本样式几种实现方式)
- 当TextView或者EditView的内容发生变化时,其他组件及时给予响应时,我们可以使用TextWatcher来实现。
- 【android】TextView文本的 “选择文字”“复制” “粘贴” 功能的实现