一些RxBinding使用場景

1.RxBinding的好處

1.首先RxBinding是對Android View事件的擴展,它使得你能夠對View事件使用RxJava的各類操做。html

2.提供了與RxJava一致的回調,使得代碼簡潔明瞭。尤爲是頁面中充斥着大量的監聽事件,各類各樣的匿名內部類時。git

3.幾乎支持咱們經常使用的全部控件及事件。(v四、v七、design、recyclerview等)另外每一個庫還有對應的Kotlin支持庫。github

2.RxBinding準備工做

添加相應的依賴(按需添加):spa

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.RxBinding使用場景

1.防止按鈕重複點擊

這個應該是最經常使用的方法了。利用操做符throttleFirst取時間間隔內第一次點擊事件。一樣利用操做符throttleLastdebounce也能夠實現。code

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.點擊的屢次監聽

RxBinding文檔中有這麼一段話:htm

 

大意是說:Android是不能屢次監聽同一個點擊事件。但利用RxJava的操做符,例如publishsharereplay能夠實現。而RxBinding剛好支持對點擊事件的屢次監聽。這個說實話我沒有用到過,可是總有人須要的,就說一下。blog

那麼直接上代碼:事件

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

打印結果:ip

 
  • 1
  • 2
  • 3

3.獲取驗證碼倒計時

這個場景你們應該不陌生。好比註冊帳號時,咱們須要獲取驗證碼用來驗證手機號碼,在等待驗證碼時,界面會有倒計時提示咱們從新獲取之類的。內存

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

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

4.表單的驗證。

好比常見的登陸頁面,只有當用戶名,密碼輸入格式正確了,才能夠去點擊登陸按鈕。這個利用操做符combineLatest就能夠巧妙實現。直接上代碼:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

操做符combineLatest做用就是當多個Observables中的任何一個發射了一個數據時,經過必定的方法去組合多個Observables最新數據,而後發射最終結果。

在本例中兩個輸入框只要內容發生變化,就會發送Observable而後咱們在Fun2中利用咱們的驗證方法去判斷輸入框中最新的內容,最終返回是否可點擊的結果。

這個例子咱們也能夠看到簡潔之處。咱們使用RxTextView.textChanges(mEtPhone)就能夠實現監聽,而使用通常方法則像下面代碼這樣。(其實你可能只須要onTextChanged())

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4.RxBinding注意點

在上面的例子中,細心地你會發現,我會在onDestroy方法時手動的解除訂閱,爲的就是防止內存泄露,若是你以爲很麻煩的話,具體可使用RxLifecycle,這裏我就不過多的介紹了。

5.總結

RxBinding的實現其實比較簡單,你們有興趣能夠去閱讀一些源碼。固然使用場景還有不少,你們能夠去觸類旁通,我就不一一去說了。

最後本文的例子我已經所有上傳到Github,你們能夠自行參考。喜歡的話多多Star,點贊!

6.參考

  1. RxJava操做符之Share, Publish, Refcount

  2. RxJava-Android-Samples

相關文章
相關標籤/搜索