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

如何实现点击同一按钮先增首个分数,5秒后增第二个分数?

实现点击按钮先加第一个分数、5秒后加第二个分数的方案

你只需要修改按钮的点击事件逻辑,结合CountDownTimer实现5秒延迟更新第二个分数即可,具体代码调整如下:

基础实现版本

直接在按钮点击时先更新第一个分数,再启动5秒倒计时,结束后更新第二个分数:

binding.trueButton.setOnClickListener {
    // 立即更新第一个分数
    firstTeamScore++
    binding.scoreText.text = firstTeamScore.toString()

    // 启动5秒倒计时,完成后更新第二个分数
    object : CountDownTimer(5000, 1000) {
        override fun onTick(millisUntilFinished: Long) {
            // 可选:在这里显示倒计时剩余时间,比如绑定到time控件
            binding.time.text = (millisUntilFinished / 1000).toString()
        }

        override fun onFinish() {
            // 5秒后更新第二个分数
            secondTeamScore++
            binding.scoreText.text = secondTeamScore.toString()
        }
    }.start()
}

防重复点击优化版本

如果需要避免用户多次点击按钮导致多个倒计时同时运行,可以添加一个标记变量控制:

// 在类内定义一个标记变量
private var isScoreCounting = false

binding.trueButton.setOnClickListener {
    if (isScoreCounting) return@setOnClickListener
    
    isScoreCounting = true
    // 立即更新第一个分数
    firstTeamScore++
    binding.scoreText.text = firstTeamScore.toString()

    // 启动5秒倒计时
    object : CountDownTimer(5000, 1000) {
        override fun onTick(millisUntilFinished: Long) {
            binding.time.text = (millisUntilFinished / 1000).toString()
        }

        override fun onFinish() {
            // 更新第二个分数
            secondTeamScore++
            binding.scoreText.text = secondTeamScore.toString()
            // 重置标记,允许再次点击
            isScoreCounting = false
            
            // 如果需要触发你原有对话框的逻辑,可在这里调用 tt.start()
        }
    }.start()
}

说明

  • 你原有tt计时器的对话框逻辑可以保留,如果需要在第二个分数更新后触发对话框,只需在倒计时的onFinish方法中添加tt.start()即可。
  • 如果不需要显示倒计时,可删除onTick方法内的代码,或者将倒计时的第二个参数(间隔时间)设为5000,只触发一次结束事件。

内容的提问来源于stack exchange,提问作者Raşit Melih Dinçer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:47:24