Jetpack Composeを使ってみたい④ ViewModel, LiveData

Jetpack Composeを使ってみたい!と思ってCodelabを元に勉強してみた記録。
Jetpack Compose for Android Developers

Composeの状態管理にViewModel, LiveDataを使用する方法をまとめる。
参考は上記コードラボと公式ドキュメント。
Compose とその他のライブラリ  |  Jetpack Compose  |  Android Developers

依存関係

implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
implementation "androidx.compose.runtime:runtime-livedata:$compose_runtime_version"

ViewModel,LiveDataをComposeで使用する

class SampleViewModel() : ViewModel(){
    private var _sampleData = MutableLiveData(0)
    val sampleData : LiveData<Int> = _sampleData
    ...
}
@Composable
fun SampleScreen(
    viewModel: SampleViewModel = viewModel()
){
    val data by viewModel.sampleData.observeAsState()

    data?.let {
        Text(text = "$data")
    }
}

ViewModel
viewModel()関数を呼び出してView Modelにアクセスする。
viewModel()は、既存のViewModelを返すか、指定されたスコープで新しく作成する。
一度作成されたViewModelインスタンスは、スコープが存続している限り保持される。
コンポーザブルがアクティビティで使用されている場合、viewModel()は、
アクティビティが終了するかプロセスが強制終了されるまで同じインスタンスを返す。

LiveData
observeAsState()を使用して、LiveDataをStateとしてモニタリングする。
これによりLiveDataが更新されるたびに、その値を使用したコンポーザブルが再コンポーズされる。
(State型にしないと状態として認識されず、自動的な再コンポーズがされない。)
LiveDataが返す値はnullになる可能性があるため、使用時にnullチェックをする。

前の記事
mtnmr.hatenablog.com

次の記事
mtnmr.hatenablog.com