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

Jetpack Compose足球分组赛应用:切换分组后ScoreInput值重置问题求助

解决方案:足球分组赛应用的分数重置与编辑权限问题

一、切换分组时重置分数到初始值0:0

  • 给每个分组维护独立的分数数据集合,比如用字典存储,键为分组标识(如GroupA/GroupB),值为该组所有比赛的分数(初始值全为0:0)。
  • 维护一个当前选中分组的状态变量,当这个变量变化时,自动从字典中读取对应分组的初始分数,填充到ScoreInput组件中。
  • 示例代码(以Jetpack Compose为例):
// 存储所有分组的分数,初始值都是0:0
val groupScores = remember { mutableStateMapOf(
    "GroupA" to mutableMapOf("match1" to "0:0", "match2" to "0:0"),
    "GroupB" to mutableMapOf("match1" to "0:0", "match2" to "0:0"),
    // 其他4个分组同理
) }

var currentGroup by remember { mutableStateOf("GroupA") }
var currentMatchScore by remember { mutableStateOf(groupScores["GroupA"]!!["match1"]!!) }

// 切换分组时触发分数重置
LaunchedEffect(currentGroup) {
    currentMatchScore = groupScores[currentGroup]!!["match1"]!! // 这里可根据当前显示的比赛动态调整
}

二、控制同一组已确认结果的编辑权限

  • 新增一个分组确认状态的字典,键为分组标识,值为布尔类型(true表示已确认,false表示未确认)。
  • 在ScoreInput(OutlinedTextField)中设置enabled属性,绑定对应分组的确认状态:已确认则禁用输入,未确认则允许编辑。
  • 提供确认/取消确认按钮,点击时更新对应分组的确认状态。
  • 示例代码片段:
val groupConfirmed = remember { mutableStateMapOf(
    "GroupA" to false, "GroupB" to false,
    // 其他分组默认false
) }

// 分数输入组件
OutlinedTextField(
    value = currentMatchScore,
    onValueChange = { 
        if (!groupConfirmed[currentGroup]!!) {
            currentMatchScore = it
            groupScores[currentGroup]!!["match1"] = it // 更新对应分组的分数存储
        }
    },
    enabled = !groupConfirmed[currentGroup]!!,
    label = { Text("当前比赛分数") }
)

// 确认按钮
Button(onClick = {
    groupConfirmed[currentGroup] = !groupConfirmed[currentGroup]!!
}) {
    Text(if (groupConfirmed[currentGroup]!!) "取消确认" else "确认结果")
}

三、复用界面避免重复创建

  • 将分组赛事的UI封装成一个可复用组件,接收currentGroup、groupScores、groupConfirmed以及回调函数作为参数,组件内部根据传入的参数动态渲染对应分组的内容。
  • 示例组件结构:
@Composable
fun GroupMatchComponent(
    currentGroup: String,
    groupScores: MutableStateMap<String, MutableMap<String, String>>,
    groupConfirmed: MutableStateMap<String, Boolean>,
    onScoreUpdate: (String, String, String) -> Unit // 分组标识、比赛ID、新分数
) {
    // 渲染当前分组的所有比赛输入项
    groupScores[currentGroup]?.forEach { (matchId, score) ->
        OutlinedTextField(
            value = score,
            onValueChange = { 
                if (!groupConfirmed[currentGroup]!!) {
                    onScoreUpdate(currentGroup, matchId, it)
                }
            },
            enabled = !groupConfirmed[currentGroup]!!,
            label = { Text("比赛$matchId 分数") }
        )
    }
}

内容的提问来源于stack exchange,提问作者john2115

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:12:17