(二)RxJava+RxBinding在View上的一些使用技巧
2016-03-29 15:11
661 查看
博客首页
1、View防止连续点击Demo
不多说,很常用的功能
throttleFirst操作符:仅发送指定时间段内的第一个信号
2、CheckBox状态更新相关Demo
(1) 设置界面某项功能被打开或关闭,在SharedPreferences中存储对应的开关标记,方便其他地方读取
注:需要RxSharedPreferences库支持:https://github.com/f2prateek/rx-preferences
(2)在用户登录界面时,如果用户未勾选同意用户协议,不允许登录
效果图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/21/310fdad917e354e8f51372307269a13c)
3、搜索关键字提醒
搜索的关键字提醒功能,RxJava实现方式是如此的小清新。
debounce操作符:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/21/62dfcbfa83158f50e9b2c1e34b1c92a9)
(此处有些小问题:可以看到代码在获取到用户输入的字符后,便通过getKeyWordFromNet()方法拉去服务器匹配到的关键字,但这里明显是在RxJava中嵌套了RxJava代码,违背了Rxjava链式编程的初衷,本人第一时间想到用flatMap操作符进行转换链接,可flatMap中的call方法始终没有执行,诺有大神另有其他解决方案,还望给小弟解惑)
效果图如下:
![](http://blog.csdn.net/qq1026291832/article/details/file:/C:/Users/ljb/AppData/Local/YNote/data/cn_ljb@163.com/c33c3a3171154b61ac4b1ea63138638c/search.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/21/de2a19967a586dff702fd30199bc6a49)
源码: https://github.com/cn-ljb/rxjava_for_android
1、View防止连续点击Demo
不多说,很常用的功能
throttleFirst操作符:仅发送指定时间段内的第一个信号
RxView.clicks(btn_click) .throttleFirst(3, TimeUnit.SECONDS) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Toast.makeText(getActivity(), R.string.des_demo_not_more_click, Toast.LENGTH_SHORT).show(); } });
2、CheckBox状态更新相关Demo
(1) 设置界面某项功能被打开或关闭,在SharedPreferences中存储对应的开关标记,方便其他地方读取
注:需要RxSharedPreferences库支持:https://github.com/f2prateek/rx-preferences
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); RxSharedPreferences rxPreferences = RxSharedPreferences.create(preferences); Preference<Boolean> xxFunction = rxPreferences.getBoolean("xxFunction", false); checkBox1.setChecked(xxFunction.get()); RxCompoundButton.checkedChanges(checkBox1) .subscribe(xxFunction.asAction());
(2)在用户登录界面时,如果用户未勾选同意用户协议,不允许登录
RxCompoundButton.checkedChanges(checkBox2) .subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { btn_login.setClickable(aBoolean); btn_login.setBackgroundResource(aBoolean ? R.color.can_login : R.color.not_login); } });
效果图如下:
3、搜索关键字提醒
搜索的关键字提醒功能,RxJava实现方式是如此的小清新。
debounce操作符:
RxTextView.textChangeEvents(et_search) .debounce(300, TimeUnit.MILLISECONDS) //debounce:每次文本更改后有300毫秒的缓冲时间,默认在computation调度器 .observeOn(AndroidSchedulers.mainThread()) //触发后回到Android主线程调度器 .subscribe(new Action1<TextViewTextChangeEvent>() { @Override public void call(TextViewTextChangeEvent textViewTextChangeEvent) { String key = textViewTextChangeEvent.text().toString().trim(); if (TextUtils.isEmpty(key)) { iv_x.setVisibility(View.GONE); if (mAdapter != null) { mAdapter.clear(); mAdapter.notifyDataSetChanged(); } } else { iv_x.setVisibility(View.VISIBLE); getKeyWordFormNet(key) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List<String>>() { @Override public void call(List<String> strings) { initPage(strings); } }); } } });
(此处有些小问题:可以看到代码在获取到用户输入的字符后,便通过getKeyWordFromNet()方法拉去服务器匹配到的关键字,但这里明显是在RxJava中嵌套了RxJava代码,违背了Rxjava链式编程的初衷,本人第一时间想到用flatMap操作符进行转换链接,可flatMap中的call方法始终没有执行,诺有大神另有其他解决方案,还望给小弟解惑)
效果图如下:
![](http://blog.csdn.net/qq1026291832/article/details/file:/C:/Users/ljb/AppData/Local/YNote/data/cn_ljb@163.com/c33c3a3171154b61ac4b1ea63138638c/search.gif)
源码: https://github.com/cn-ljb/rxjava_for_android
相关文章推荐
- Spring Boot 入门
- 解决Eclipse Pydev中import beacutifulsoup的时候报错:Unresolved import
- java.net.BindException: Address already in use: JVM_Bind
- JAVA数据类型自动转换,与强制转换
- java多线程机制
- java笔记5→String字符串
- Java实现字符串反转
- 1分钟教会你SpringMVC多文件上传
- Spring Task定时任务
- Java finalize方法使用
- javaweb常见错误代号
- AsyncTask源码分析之Java篇
- 4、Container Extension Points(spring容器的扩展)
- java对象的序列化和反序列化
- spring mvc返回类型总结(主要是对返回路径的总结)
- Java框架基础——反射(reflect)
- java中的常用集合和线程安全
- Java中避免NullPointerException的一些方法
- JAVA异常机制
- Struts---- <s:bean>标签