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

Android数学测试APP中CountDownTimer重玩按钮无法重置问题

解决CountDownTimer无法重置的问题

我看到你在开发这款数学测试APP时,遇到了重玩按钮点击后计时器无法正常重置的问题,咱们来一步步搞定它!

问题根源分析

  1. preostaloVreme变量未重置:第一次倒计时结束后,preostaloVreme会被更新为0,当你点击重玩调用startovanjeTajmera()时,传入的是已经归零的preostaloVreme,导致计时器直接触发onFinish(),看起来就像没启动一样。
  2. 旧计时器未取消:如果不取消之前的countDownTimer实例,可能会出现多个计时器同时运行的情况,引发逻辑混乱甚至内存泄漏。

解决方案

我们需要在重玩时做三件关键的事:重置剩余时间、取消旧计时器、重新初始化题目和UI状态。

修改igrajPonovo()方法

public void igrajPonovo(View view) {
    // 1. 重置计数变量
    brojPokusaja = 0;
    brojPogodnjenihOdgovora = 0;
    krajnjiRezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
    
    // 2. 重置剩余时间为初始值30秒
    preostaloVreme = 30000;
    
    // 3. 取消旧的计时器(如果存在)
    if (countDownTimer != null) {
        countDownTimer.cancel();
    }
    
    // 4. 生成新的题目
    ispisivanjeDugmeta();
    
    // 5. 启动新计时器并调整UI状态
    startovanjeTajmera();
    linearLayout.setVisibility(View.INVISIBLE);
    startDugme.setVisibility(View.INVISIBLE); // 和第一次启动保持一致
}

优化startovanjeTajmera()方法(可选但推荐)

为了避免重复代码,确保每次启动计时器前都取消旧实例,可以把取消逻辑移到这里:

private void startovanjeTajmera() {
    // 先取消旧计时器
    if (countDownTimer != null) {
        countDownTimer.cancel();
    }
    
    countDownTimer = new CountDownTimer(preostaloVreme, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            preostaloVreme = millisUntilFinished;
            updateTajmer();
        }

        @Override
        public void onFinish() {
            linearLayout.setVisibility(View.VISIBLE);
            rezultat.setText(brojPogodnjenihOdgovora + " / " + brojPokusaja);
            startDugme.setVisibility(View.VISIBLE); // 这里改成显示开始按钮,方便用户手动触发
        }
    }.start();
}

额外注意点

  • 你原来在onFinish()里调用了startDugme(findViewById(R.id.start_dugme));,这会直接触发计时器重启,不符合逻辑,建议改成显示开始按钮,让用户手动点击启动。
  • 确保所有UI操作都在主线程执行(你的代码已经满足,因为CountDownTimer的回调默认在主线程)。

这样修改后,点击重玩按钮时,计时器会重新从30秒开始倒计时,同时生成新的题目,分数也会重置,完美解决你的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:07:51