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

CountDownTimer与TextView配合使用时时间显示异常问题求助

问题根因分析
  • 核心逻辑错误:开始/暂停按钮的点击回调中无条件调用了setTime()方法,点击暂停时也会重新解析当前TextView显示的时间覆盖剩余时长,直接触发秒数显示异常。
  • 字符串截取错误:setTime()方法中解析秒数的代码str2 = input.substring(4, 5)仅截取了秒数的第二位,比如时间为01:59时仅取到字符9,解析后秒数变为9,就会出现59跳转至09的问题。
  • 冗余错误代码:setTime()最后一行textView.setText(Long.toString(mTimeLeftInMillis));中textView变量未定义,这段代码本身也无实际作用。
修复方案
  1. 修改按钮点击事件逻辑,只有首次启动计时器前才需要调用setTime(),暂停流程不需要调用:
mButtonStartPause.setOnClickListener(view -> {
    if(mTimerRunning)
    {
        pauseTimer();
    }
    else {
        // 仅从未运行状态启动时,读取当前显示的时间设置倒计时时长
        setTime();
        startTimer();
    }
});
  1. 修正setTime()方法中秒数的截取逻辑,截取索引3到5的字符获取完整两位秒数,同时删除冗余代码:
@SuppressLint("SetTextI18n")
private void setTime()
{
    String input = textView1.getText().toString();
    String str1 = input.substring(0, 2);
    // 截取完整两位秒数
    String str2 = input.substring(3, 5);
    long number1 = Long.parseLong(str1);
    long number2 = Long.parseLong(str2);
    long sumMillisMin = number1 *60000;
    long sumMillisSec = number2 *1000;
    long millisInput = sumMillisMin + sumMillisSec;
    mStarTimeInMillis = millisInput;
    mTimeLeftInMillis = mStarTimeInMillis;
}
  1. 可选优化:将CountDownTimer的回调间隔从500ms改成1000ms,避免不必要的频繁刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:36:05