MediatorLiveDataを使ってModel層とViewModelを連携させる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

環境

Kotlin 1.3.0-rc-57

kotlinx.coroutines 0.26.1-eap13

Architecture Components 1.1.1

なぜMediatorLiveDataを使うのか

MediatorLiveDataを使うことで、Model層で定義されたLiveDataを
Viewで指定したLifecycleOwnerを使って監視することが可能となります。

MediatorLiveDataは自身がアクティブになるまで、addSourceしたLiveDataをアクティブにしません。
そのため、Model層で値が変化しても、ViewがMediatorLiveDataをobserveするまでViewに変更が通知されません。

Model(Repository)

ViewModel

※Viewにて、binding.setLifecycleOwner(this)を行うことで、ViewModelをバインドした際に利用されるLifecycleOwnerを指定しておきましょう。

Utils

コルーチンを利用できるようにしたLiveData
実行スレッドはテストしやすいようにKoinでinjectしています。

おわりに

今まではRxを使って対応することが多かったですが、LiveDataがDataBindingに対応したことで、 ViewModelにLiveDataを持たせる意味が生まれ、より使いやすくなったと思います。 また、今回の主題ではないですが、コルーチンを利用することで、非同期処理にも対応可能と。

もはやRxは不要と言えるのではないでしょうか。 昨年はRx信者としてコードを書いていましたが、もうお世話になることも無いかもしれません。