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
相关产品推荐
相关产品推荐

