【问题标题】:No recomposition [Jetpack Compose]无重组 [Jetpack Compose]
【发布时间】:2021-11-09 20:50:33
【问题描述】:

在我的 OpinionViewModel 中:

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

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

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

我的主要@Composable:

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()
                                }
                            }
        
                        })
                }
            }
        }

@Composable 部分:

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 以查看添加的项目。我是否遗漏了什么或问题与底页有关?

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    问题是当你修改它的内容时你的 MutableList 并没有改变(引用仍然保持不变)。要解决此问题,请使用 List 而不是 MutableList。

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

    添加一个元素到它:

    label.value += "Lorem Ipsum"
    

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

    【讨论】:

    • 哦,你是对的。谢谢!
    • 如果它解决了您的问题,请将答案标记为已接受 :)
    • 如果我想从列表中删除特定项目怎么办?
    • 你试过label.value -= "String to remove"吗?
    猜你喜欢
    • 2022-11-25
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多