You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Exposed下拉菜单勾选选项后统计数据需关闭菜单才更新的问题求助

Exposed下拉菜单勾选选项后统计数据需关闭菜单才更新的问题求助

大家好,我最近在做一个统计界面,用Jetpack Compose的ExposedDropdownMenu做筛选器,遇到个头疼的问题想请教下:

界面里有个游戏类型的筛选下拉框,每个游戏选项旁边都带复选框。初始状态所有复选框都是勾选的,统计数据会包含所有游戏。现在的需求是用户勾选/取消勾选游戏时,统计数据能实时更新,不用关闭下拉菜单就能看到变化。

目前的情况是:复选框的状态切换正常,而且我用调试工具确认过,统计数据的逻辑在勾选变化时确实已经更新了,但界面上的统计数值必须等我把下拉菜单关掉之后才会刷新出来,这完全不符合预期的交互效果。

我的核心代码如下:

val selectedGame = remember { SnapshotStateList<String>() }

ExposedDropdownMenuBox(
    expanded = expandedGame,
    onExpandedChange = { onExpandGameChange(it) },
) {

    ShowOutlinedTextField(
        readOnly = true,
        value = stringResource(id = R.string.game_filter),
        modifier = Modifier
            .padding(10.dp)
            .menuAnchor(type = MenuAnchorType.PrimaryNotEditable, 
             enabled = true)
    )

    ExposedDropdownMenu(
        expanded = expandedGame,
        onDismissRequest = { onExpandGameChange(false) }
    ) {
        gameNames.forEach { game ->
            DropdownMenuItem(
                onClick = { onExpandGameChange(false) },
                text = {
                    Row(
                        verticalAlignment = Alignment.CenterVertically
                    ) {
                        Checkbox(
                            checked = 
                        selectedGame.contains(game.gameName),
                            onCheckedChange = { isChecked ->
                                if (isChecked) {
                                    selectedGame.add(game.gameName)
                                } else {
                                    selectedGame.remove(game.gameName)
                                }
                                
                         setSelectedGames(selectedGame.toList())
                            }
                        )
                        Spacer(modifier = Modifier.width(8.dp))
                        Text(text = game.gameName)
                    }
                }
            )
        }
    }
}

我之前试过手动加一个强制重组的变量来触发界面刷新,代码如下,但并没有解决问题:

var forceRecomposition by remember { mutableStateOf(0) }

Checkbox(
    checked = selectedLocations.contains(casino.name),
    onCheckedChange = { isChecked ->
        if (isChecked) {
            selectedLocations.add(casino.name)
        } else {
            selectedLocations.remove(casino.name)
        }
        setSelectedCasinos(selectedLocations.toList())
        forceRecomposition++
    }
)

有没有大佬能帮我看看问题出在哪,怎么才能让统计数据在勾选变化时实时显示出来呢?

备注:内容来源于stack exchange,提问作者JD74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:59:29