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
で変換して上げる必要があります。