在我的项目中,我有两个片段。
一个是a normal fragment
,另一个是a bottomSheetDialogFragment
。
在我的normal fragment
,我有一个lazyColumn。
我想在 bottomSheetDialogFragment 中进行一些设置并创建一个新Hiit
对象并将其放入我hiitItems
的viewmodel
.
问题是,由于 mynormal fragment
部分被 覆盖,所以bottomSheetDialogFragment
当我的列表更改时,jetpack compose 不会重新组合。
所以我决定转向stateFlow
考虑到它总是在发射,我认为这可能会导致重组。但不幸的是,它没有。
以下是我的代码:
// in my viewmodel
// using stateflow to hold the list of hiitItems
private var _hiitItems = MutableStateFlow(mutableListOf(HiitItem()))
val hiitItems = _hiitItems
在我的normal fragment
中,我使用 composeView 来利用jetpack compose
:
setContent {
// get hiitItems
val hiitItems by vm.hiitItems.collectAsState()
...
// lazyColumn
LazyColumn(modifier = Modifier.fillMaxSize()) {
items(hiitItems) // I'm assuming auto refreshing the list here
{
ItemCard(item = it) // ItemCard is just an ordinary composable
}
}
}
在我的bottomSheetDialogFragment
中,我有一个按钮,其功能是将新创建的 hiitItem 添加到我的hiitItems
列表中,并导致重组:
hiitItems.add(newItem)
知道为什么在hiitItems
我关闭bottomSheetDialogFragment 后列表中的更改不会导致重新组合吗?