如何实现点击同一按钮先增首个分数,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
相关产品推荐
相关产品推荐

