0

我的 LazyColumn 有一个非常奇怪的问题。我正在更新 ViewModel 中的 menuList 状态,视图会重新组合,但列表不会重绘。

当我使用调试器时,它会到达 LazyColumn 然后停止,这意味着不会用新数据重绘子级。任何想法为什么?谢谢!

我的观点:

val menuList = viewModel.menuData.observeAsState()

LazyColumn() { // <- Debugger stops here
                items(menuList.value.sections.size) { i->
                    MenuItem(menuList.value[i])
                }
}

我的视图模型:

private var menu: MenuUiState? = null
 val menuData: MutableLiveData<MenuUiState> by lazy {
    MutableLiveData<MenuUiState>()
}

// ...
menu?.sections?.forEach {
    //update menu properties here
}
menuData.value = menu?.copy()
4

1 回答 1

1

您正在观察MenuUiState对象,但实际上并未观察对列表项所做的更改sections

您应该制作sections一个MutableStateListinside MenuUiState,或者ViewModel直接将其存储:

val sections = mutableStateListOf<Section>() // store it either inside the ViewModel or inside MenuUiState

然后只需在可组合中正常观察它:

LazyColumn() { // <- Debugger stops here
      items(viewModel.sections) { section ->
          MenuItem(section)
      }
}
于 2022-02-18T14:55:46.120 回答