android 不重组[Jetpack合成]

c6ubokkw  于 2022-11-27  发布在  Android
关注(0)|答案(1)|浏览(175)

在我的意见视图模型中:

val labels = MutableStateFlow<MutableList<String>>(mutableListOf())

当操作来自UI(来自BottomSheet项)时,我将项添加到列表中:

state.labels.value.add("Lorem Ipsu")

My main @可组合:

fun OpinionScreen(viewModel: OpinionViewModel) {
        
            val scrollState = rememberScrollState()
            val bottomState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden)
        
            val items by viewModel.state.labels.collectAsState()
            
            AppTheme(isSystemInDarkTheme()) {
                ModalBottomSheetLayout(
                    sheetState = bottomState,
                    sheetContent = { AddPhotoBottomSheet()}) {
                    Scaffold(
                        topBar = { TopBar()},
                        content = {
                            Box(
                                modifier = Modifier.fillMaxSize()
                            ) {
                                Column(
                                    modifier = Modifier
                                        .fillMaxWidth()
                                        .wrapContentHeight()
                                        .verticalScroll(scrollState)
                                ) {
                                    FirstSection()
                                    HowLongUsageSection(photos)
                                    ThirdSection()
                                }
                            }
        
                        })
                }
            }
        }

@可组合部分:

fun HowLongUsageSection(labels: MutableList<String>) {
    Column(
        modifier = Modifier
            .fillMaxWidth()
            .padding(top = 10.dp, start = 10.dp, end = 10.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        labels.forEach {
            Text(text = it, color = Color.Blue)
        }
}

问题是没有重组发生。我需要返回并再次打开UI以查看添加的项目。我是否遗漏了一些内容或问题与底部工作表有关?

9lowa7mx

9lowa7mx1#

问题是当您修改MutableList的内容时,它不会改变(引用仍然保持不变)。要解决这个问题,请使用List而不是MutableList。

val labels = MutableStateFlow(listOf<String>())

若要向其中添加元素,请执行以下操作:

label.value += "Lorem Ipsum"

现在,状态流将发出一个新值,您的UI将得到更新。

相关问题