2

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 -> 
       ...
      }
   }
}
4

1 に答える 1