【Android】LiveDataで値を監視する
LiveData
は監視可能なデータホルダークラスです。通常の監視とは異なり、LiveData
は Android のライフサイクルに応じた監視が可能です。つまり、アクティビティ、フラグメント、サービスなどの他のアプリコンポーネントのライフサイクルが考慮されます。
build.gradle
の dependencies
の設定は以下の通り。
// ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
ここでは、以下の2種類の LiveData
を解説します。
- LiveData
- MutableLiveData
LiveData
データが更新されたとき、監視者にそれを通知します。データを直接更新することはできません。
LiveData#observe
public void observe(LifecycleOwner owner, Observer<? super T> observer)
アクティビティやフラグメントなどの監視者が監視を開始します。引数 owner
には監視者のライフサイクルオーナーを指定します。監視者がアクティビティのときは this
を指定します。監視者がフラグメントのときは viewLifecycleOwner
を指定します。これは、フラグメントのライフサイクルはアクティビティのそれとは異なり、不要な更新通知などを避けるためです。
以下は、フラグメントが LiveData
を監視する場合の observe
の使用方法です。
viewModel.count.observe(viewLifecycleOwner, { binding.countText.text = it.toString() })
LiveData#getValue
public T getValue()
LiveData
に格納されている値を取得します。
MutableLiveData
データが更新されたとき、観察者にそれを通知します。データを直接更新することができます。LiveData
を継承しています。
一般的に、クラスのカプセル化を意識して、MutableLiveDataプロパティを非公開にし、LiveDataプロパティのみを公開します。
class MainViewModel : ViewModel() { private val _count = MutableLiveData(0) val count: LiveData<Int> get() = _count
MutableLiveData#setValue
public void setValue(T value)
MutableLiveData
に値を設定します。メインスレッドから値を設定する場合に使用します。
MutableLiveData#postValue
public void postValue(T value)
MutableLiveData
に値を設定します。ワーカースレッドから値を設定する場合に使用します。