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

Chronometer.start()方法失效:Android秒表无法启动始终显示00:00

问题分析与修复:Chronometer无法启动

核心问题出在按钮点击监听器的重复绑定上:你给btnStart连续设置了两次点击监听器,第二次的监听器直接覆盖了第一次的逻辑,导致点击Start按钮时实际执行的是resetChrono()而非startChrono(),秒表自然始终停在00:00。

修复后的代码

class MainActivity : ComponentActivity() {
    private lateinit var btnStart: Button
    private lateinit var btnStop: Button
    private lateinit var btnReset: Button
    private lateinit var chronometer: Chronometer

    private var pausedAt: Long = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

        btnStart = findViewById<Button>(R.id.btn_start)
        btnStop = findViewById<Button>(R.id.btn_stop)
        btnReset = findViewById<Button>(R.id.btn_restart)
        chronometer = findViewById<Chronometer>(R.id.chrono)

        btnStart.setOnClickListener(View.OnClickListener { startChrono() })
        btnStop.setOnClickListener(View.OnClickListener { stopChrono() })
        // 修复:将这行的btnStart改为btnReset
        btnReset.setOnClickListener(View.OnClickListener { resetChrono() })
    }

    private fun startChrono() {
        chronometer.base = SystemClock.elapsedRealtime()-pausedAt
        chronometer.start()
    }

    private fun stopChrono() {
        pausedAt = SystemClock.elapsedRealtime()-chronometer.base
        chronometer.stop()
    }

    private fun resetChrono() {
        pausedAt = 0
        chronometer.base = SystemClock.elapsedRealtime()
        // 可选:重置后确保秒表处于停止状态,逻辑更完整
        chronometer.stop()
    }
}

关键修复说明

原代码最后一行错误地将resetChrono()绑定到了btnStart,改成绑定到btnReset后,各按钮的逻辑就能正常分工:

  • Start按钮:调用startChrono(),正确启动/恢复计时
  • Stop按钮:调用stopChrono(),暂停计时并记录暂停时长
  • Reset按钮:调用resetChrono(),重置计时状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:09