Jetpack Compose では、渡されたデータの状態を変更して、UI の再構成をトリガーし、UI を変更して更新する必要があることを知っています。Jetpack Compose の状態と ViewModels hereに関するドキュメントも読みました。ただし、これは非常に単純な例であり、以下の使用例はカバーしていません。
以下は、リストの状態を更新する概念的なシナリオです。Jetpack Compose のレンダリングされた部分に反映させたい項目の状態を 1 つだけ更新します。新しいリストをデータとして割り当てる必要があることはわかっています。これにより、再構成がトリガーされ、以下でtoMutableList()
これを達成しようとしています。しかし、これはうまくいきません。この種のコードを実行すると、再構成は行われず、リスト内の単一アイテムの状態は更新されません。
なぜこれが機能しないのか、どのようにアプローチすればよいのか、誰かに説明してもらえますか?
については既に知ってmutableStateListOf()
いますが、ビュー モデルとアプリの Jetpack Compose 以外の部分との互換性を維持したい場合、どのようにアプローチすればよいのでしょうか?
class Model : ViewModel() {
private val _items = MutableLiveData(listOf<Something>())
val items: LiveData<String> = _items
fun update(item: Something) {
_items.value = _items.value!!.toMutableList().map {
if (it == item) {
// Update item. But it's not reflected in Jetpack Compose
}
}
}
}
@Composable
fun ListComponent(model: Model) {
val items by model.items.observeAsState(emptyList())
LazyColumn {
items(items) { item ->
...
}
}
}