Jetpack ComposeでLiveDataを状態として扱う
最終更新日:2022-05-09
LiveDataは監視可能なデータのいれものです。Jetpack ComposeではこのLiveDataを状態として扱うことができます。最新のデータが取得できた際、UIの必要な部分を再composeしてくれます。
ライブラリを追加する
Jetpack ComposeでLiveDataを使うには、 runtime-livedata
を追加します。
dependencies {
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
}
ViewModelにLiveDataを追加する
今回はボタンを押した数をいれておくLiveDataを用意してみます。さらにカウントアップのためのメソッドも用意してみます。
class MainViewModel: ViewModel() {
// 初期値は0としました
private val _counter = MutableLiveData(0)
val counter: LiveData<Int> = _counter
fun add() {
_counter.value = _counter.value!! + 1
}
}
ComposableでLiveDataを状態として扱う
ViewModelに入っているLiveDataを状態として扱うには、 observeAsState()
を呼びます。拡張関数として定義されているので追加のimportが必要です。
@Composable
fun MainScreen(
viewModel: MainViewModel,
) {
// 状態として取得
val counter = viewModel.counter.observeAsState()
Column {
counter.value?.let { count ->
Text("$count")
}
Button(onClick = {
viewModel.add()
}) {
Text("Add")
}
}
}
これで、ViewModelを使ってカウントアップする処理が実現できました。