RxBinding使用场景

打不死的小强,永不crash的Android。一个比较新奇的思路去做的防止Crash,有兴趣的可以看下代码,原理非常简单。

RxBinding使用场景_第1张图片

项目地址:
https://github.com/android-notes/Cockroach

本文作者

本文由唯鹿投稿。
唯鹿的博客地址:
http://blog.csdn.net/qq_17766199

1

RxBinding的好处

1.首先RxBinding是对Android View事件的扩展,它使得你可以对View事件使用RxJava的各种操作。

2.提供了与RxJava一致的回调,使得代码简洁明了。尤其是页面中充斥着大量的监听事件,各种各样的匿名内部类时。

3.几乎支持我们常用的所有控件及事件。(v4、v7、design、recyclerview等)另外每个库还有对应的Kotlin支持库。

2

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也可以实现。

RxBinding使用场景_第2张图片

(2)点击的多次监听

RxBinding文档中有这么一段话:

Mapping an observable to an Android event (e.g., view clicks) is a direct mapping. The library is not responsible for supporting multiple observables bound to the same view. Multiple listeners to the same view events can be achieved through operators like publish(), share(), or replay(). Consult the RxJava documentation for which is appropriate for the behavior that you want.

大意是说:Android是不能多次监听同一个点击事件。但利用RxJava的操作符,例如publish, share或replay可以实现。

而RxBinding恰好支持对点击事件的多次监听。这个说实话我没有用到过,但是总有人需要的,就说一下。

那么直接上代码:

RxBinding使用场景_第3张图片

打印结果:
I/ButtonClicksActivity: 第一次 I/ButtonClicksActivity: 第二次

(3)获取验证码倒计时

这个场景大家应该不陌生。比如注册账号时,我们需要获取验证码用来验证手机号码,在等待验证码时,界面会有倒计时提示我们重新获取之类的。

RxBinding使用场景_第4张图片

代码很简单,就不过多的解释了。这里新用到了interval操作符,它是用来在给定的时间间隔发射从0开始的整数序列。例子中1s发射一次。

(4)表单的验证

比如常见的登录页面,只有当用户名,密码输入格式正确了,才可以去点击登录按钮。这个利用操作符combineLatest就可以巧妙实现。

直接上代码:

RxBinding使用场景_第5张图片

操作符combineLatest作用就是当多个Observables中的任何一个发射了一个数据时,通过一定的方法去组合多个Observables的最新数据,然后发射最终结果。

在本例中两个输入框只要内容发生变化,就会发送Observable然后我们在Fun2中利用我们的验证方法去判断输入框中最新的内容,最终返回是否可点击的结果。

这个例子我们也可以看到简洁之处。

我们使用RxTextView.textChanges(mEtPhone)就可以实现监听,而使用一般方法则像下面代码这样。(其实你可能只需要onTextChanged())

RxBinding使用场景_第6张图片

3

总结

在上面的例子中,细心地你会发现,我会在onDestroy方法时手动的解除订阅,为的就是防止内存泄露,如果你觉得很麻烦的话,具体可以使用RxLifecycle:
https://github.com/trello/RxLifecycle

这里我就不过多的介绍了。

RxBinding的实现其实比较简单,大家有兴趣可以去阅读一些源码。当然使用场景还有很多,大家可以去举一反三,我就不一一去说了。

最后本文的例子我已经全部上传到Github,大家可以自行参考。喜欢的话多多Star,点赞!
https://github.com/simplezhli/RxBindingExample

参考
http://www.cnblogs.com/liulipeng/p/5050353.html
https://github.com/kaushikgopal/RxJava-Android-Samples

你可能感兴趣的:(RxBinding使用场景)