課題
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() }