RxBinding使用場景

打不死的小強,永不crash的Android。一個比較新奇的思路去做的防止Crash,有興趣的可以看下代碼,原理非常簡單。

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

本文作者

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

1

RxBinding的好處

1.首先RxBinding是對Android View事件的擴(kuò)展,它使得你可以對View事件使用RxJava的各種操作。

2.提供了與RxJava一致的回調(diào),使得代碼簡潔明了。尤其是頁面中充斥著大量的監(jiān)聽事件,各種各樣的匿名內(nèi)部類時。

3.幾乎支持我們常用的所有控件及事件。(v4、v7、design、recyclerview等)另外每個庫還有對應(yīng)的Kotlin支持庫。

2

RxBinding使用場景

RxBinding準(zhǔn)備工作,添加相應(yīng)的依賴(按需添加):
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)防止按鈕重復(fù)點擊

這個應(yīng)該是最常用的方法了。

利用操作符throttleFirst取時間間隔內(nèi)第一次點擊事件。同樣利用操作符throttleLast、debounce也可以實現(xiàn)。

(2)點擊的多次監(jiān)聽

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是不能多次監(jiān)聽同一個點擊事件。但利用RxJava的操作符,例如publish, share或replay可以實現(xiàn)。

而RxBinding恰好支持對點擊事件的多次監(jiān)聽。這個說實話我沒有用到過,但是總有人需要的,就說一下。

那么直接上代碼:

打印結(jié)果:
I/ButtonClicksActivity: 第一次 I/ButtonClicksActivity: 第二次

(3)獲取驗證碼倒計時

這個場景大家應(yīng)該不陌生。比如注冊賬號時,我們需要獲取驗證碼用來驗證手機(jī)號碼,在等待驗證碼時,界面會有倒計時提示我們重新獲取之類的。

代碼很簡單,就不過多的解釋了。這里新用到了interval操作符,它是用來在給定的時間間隔發(fā)射從0開始的整數(shù)序列。例子中1s發(fā)射一次。

(4)表單的驗證

比如常見的登錄頁面,只有當(dāng)用戶名,密碼輸入格式正確了,才可以去點擊登錄按鈕。這個利用操作符combineLatest就可以巧妙實現(xiàn)。

直接上代碼:

操作符combineLatest作用就是當(dāng)多個Observables中的任何一個發(fā)射了一個數(shù)據(jù)時,通過一定的方法去組合多個Observables的最新數(shù)據(jù),然后發(fā)射最終結(jié)果。

在本例中兩個輸入框只要內(nèi)容發(fā)生變化,就會發(fā)送Observable然后我們在Fun2中利用我們的驗證方法去判斷輸入框中最新的內(nèi)容,最終返回是否可點擊的結(jié)果。

這個例子我們也可以看到簡潔之處。

我們使用RxTextView.textChanges(mEtPhone)就可以實現(xiàn)監(jiān)聽,而使用一般方法則像下面代碼這樣。(其實你可能只需要onTextChanged())

3

總結(jié)

在上面的例子中,細(xì)心地你會發(fā)現(xiàn),我會在onDestroy方法時手動的解除訂閱,為的就是防止內(nèi)存泄露,如果你覺得很麻煩的話,具體可以使用RxLifecycle:
https://github.com/trello/RxLifecycle

這里我就不過多的介紹了。

RxBinding的實現(xiàn)其實比較簡單,大家有興趣可以去閱讀一些源碼。當(dāng)然使用場景還有很多,大家可以去舉一反三,我就不一一去說了。

最后本文的例子我已經(jīng)全部上傳到Github,大家可以自行參考。喜歡的話多多Star,點贊!
https://github.com/simplezhli/RxBindingExample

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,183評論 25 708
  • 框架:提供一定能力的小段程序 http://www.cnblogs.com/jincheng-yangchaofa...
    姑娘請別為難小僧閱讀 7,966評論 0 132
  • 一.榜單介紹 排行榜包括四大類: 單一框架:僅提供路由、網(wǎng)絡(luò)層、UI層、通信層或其他單一功能的框架 混合開發(fā)框架:...
    偉子男閱讀 5,369評論 0 161
  • 在我二十歲的時候,我終于踏進(jìn)了星巴克的大門。 之所以這么說,是因為在高三的時候,班主任曾經(jīng)布置過一篇作文,題目叫做...
    iris_lee閱讀 873評論 0 1
  • 這樣的夜里,你在干什么呢?這個你不是某人,其實我也不知道是誰,也許你可以是任何一個人,或許你又是不可替代永遠(yuǎn)...
    離人莫嘆閱讀 221評論 0 0

友情鏈接更多精彩內(nèi)容