前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Android: LiveDataでオブジェクトのプロパティの変更を監視する

課題

UserをViewModelにLiveDataとして設定したが、Userオブジェクトのプロパティの変更を知りたい。どうすればよいか。

対応

LiveDataはvalueに値が代入されたタイミングでないとObserverに伝えてくれない。
参考サイトにはいくつかの対応案があるが、LiveDataクラスにmutationメソッドを追加する方法を採用

// 適当な場所に LiveDataExtentions.kt というファイルを作成(ファイル名はお好みで)

import androidx.lifecycle.MutableLiveData

/**
 * LiveDataでオブジェクトのプロパティ変更を検知するための関数
 */
fun <T> MutableLiveData<T>.mutation(actions: (MutableLiveData<T>) -> Unit) {
    actions(this)
    this.value = this.value
}
viewModel.user.mutation {
    it.value?.name = binding.name.text.toString()
    it.value?.email = binding.email.text.toString()
}

参考

stackoverflow.com