DataBinding + LiveData + RxJava2

Kenji Abe
3 min readDec 24, 2017

Android Studio 3.1 Canary 6 からサポートされましたっていう記事を前回書きました。

実は、Architecture Componentsには LiveDataReactiveStreams というのがあります。

これはReactiveStreamsのPublisherをLiveDataに変換したり、逆にLiveDataをReactiveStreamsに変換したりできます。

これを使うことで、RxJava2のFlowableをちょっといじるだけで、そのままDataBindingで使うことができます。

サンプル

build.gradle

implementation "android.arch.lifecycle:extensions:1.0.0"
implementation "android.arch.lifecycle:reactivestreams:1.0.0"
implementation "io.reactivex.rxjava2:rxjava:2.1.7"

ViewModel

ボタンを押すとカレントミリ秒を表示するだけです。(RxJava使う必要性はまったくないですが…)

PublishProcessor を作って、それを LiveDataReactiveStreams.fromPublisher に渡してLiveDataに変換しています。これだけです!

レイアウトXMLやActivity等には特別なことはしなくて良いので省略で。ただ、Bindingクラスの setLifecycleOwner をやるのを忘れずに。前回の記事を参考にしてください。

ReactiveStreams

あまり詳しくないのですが、ReactiveStreamsという仕様があり、RxJava2でその仕様に沿ったものはFlowableになります。

なので、Observable(PublishSubject)はそのまま使えません。もしObservableでやりたい場合はtoFlowable で変換して上げる必要があります。

--

--

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO