MutableLiveDataに値をセットする
最終更新日:2020-07-10
こちらで用意した MutableLiveData
は、とても簡単に説明すると「監視可能なデータの入れ物」です。ここでは値を外からセットする方法を紹介します。
val button = root.findViewById<Button>(android.R.id.button1)
button.setOnClickListener {
this.model.count.value = this.model.count.value!! + 1
}
ボタンをタップするとカウントを増やす例です。MutableLiveData
に値をセットするには setValue()
を、セットされている値を取り出すには getValue()
を使います。Kotlinの場合は上記の例のようにプロパティ構文が使えますが、初期値が設定されていない場合、 getValue()
は null
を返すので注意しましょう。
なお、 setValue()
はメインスレッドでしか呼べません。 AsyncTask
のようなワーカースレッドから呼ぶと、次のような例外が発生します。
java.lang.IllegalStateException: Cannot invoke setValue on a background thread
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:461)
at androidx.lifecycle.LiveData.setValue(LiveData.java:304)
ワーカースレッドから値をセットする場合は次のように postValue()
を使います。
// AsyncTaskの中
override fun doInBackground(vararg params: Void?): Void? {
model.count.postValue(model.count.value!! + 1)
return null
}