RxBinding的好处
- 首先RxBinding是对Android View事件的扩展,它使得你可以对View事件使用RxJava的各种操作。
- 提供了与RxJava一致的回调,使得代码简洁明了。尤其是页面中充斥着大量的监听事件,各种各样的匿名内部类时。
- 几乎支持我们常用的所有控件及事件。(v4、v7、design、recyclerview等)另外每个库还有对应的Kotlin支持库。
RxBinding使用场景
RxBinding准备工作,添加相应的依赖(按需添加):
compile 'com.jakewharton.rxbinding:rxbinding:1.0.0'
compile 'com.jakewharton.rxbinding:rxbinding-support-v4:1.0.0'
compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:1.0.0'
compile 'com.jakewharton.rxbinding:rxbinding-design:1.0.0'
compile 'com.jakewharton.rxbinding:rxbinding-recyclerview-v7:1.0.0'
compile 'com.jakewharton.rxbinding:rxbinding-leanback-v17:1.0.0'
复制代码
1. 这个应该是最常用的方法了。
利用操作符throttleFirst取时间间隔内第一次点击事件。同样利用操作符throttleLast、debounce也可以实现。
2. 点击的多次监听
3. 获取验证码倒计时
这个场景大家应该不陌生。比如注册账号时,我们需要获取验证码用来验证手机号码,在等待验证码时,界面会有倒计时提示我们重新获取之类的。
4. 表单的验证
比如常见的登录页面,只有当用户名,密码输入格式正确了,才可以去点击登录按钮。这个利用操作符combineLatest就可以巧妙实现。
操作符combineLatest作用就是当多个Observables中的任何一个发射了一个数据时,通过一定的方法去组合多个Observables的最新数据,然后发射最终结果。 在本例中两个输入框只要内容发生变化,就会发送Observable然后我们在Fun2中利用我们的验证方法去判断输入框中最新的内容,最终返回是否可点击的结果。 这个例子我们也可以看到简洁之处。 我们使用RxTextView.textChanges(mEtPhone)就可以实现监听,而使用一般方法则像下面代码这样。(其实你可能只需要onTextChanged())
5. 总结
在上面的例子中,细心地你会发现,我会在onDestroy方法时手动的解除订阅,为的就是防止内存泄露,如果你觉得很麻烦的话,具体可以使用RxLifecycle: github.com/trello/RxLi… 这里我就不过多的介绍了。 RxBinding的实现其实比较简单,大家有兴趣可以去阅读一些源码。当然使用场景还有很多,大家可以去举一反三,我就不一一去说了。