gpt4 book ai didi

java - 如何重置 CountDownTimer 而不必先暂停

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:03 24 4
gpt4 key购买 nike

新手寻求帮助~

我有一个带有开始、暂停和重置按钮的倒计时器。当计时器运行时,我希望能够点击重置按钮以从原始值(edittext)重新启动它。目前,我能够完成此操作的唯一方法是点击“暂停”然后“重置”。

举一个我希望完成的例子:

如果定时器设置为10秒,10-9-8-重置-10-9-8-7-6-5-重置-10-9....

提前致谢!

我浏览了论坛和 Android 开发网站

编辑:原来的问题解决了,但又出现了另一个问题。下面的代码显示了所做的更改。如果我太快地按下开始-暂停-开始,原始倒计时时间就会增加一秒。例如:15-14-pause-start-15-pause-start-16-pause-start-17-pause-start-18

private void pauseTimer(boolean actualPause) {
mCountdowntimer.cancel();
mTimerRunning = false;
if(actualPause)
updateWatchInterface();
}

private void resetTimer() {
if(mTimerRunning)
pauseTimer(false);
mTimeLeftInMillis = mStartTimeInMillis;
updateCountDownText();
updateWatchInterface();
}

最佳答案

我不确定您的确切问题是什么,所以我会提到几种方法。

选项 1:如果您记住“开始时间”(这就是 mStartTimeInMillis 所表示的,对吧?)没有任何问题,那么您可以简单地更改函数pauseTimer 的签名,如下所示:

private void pauseTimer(boolean actualPause) {
mCountdowntimer.cancel();
mTimerRunning = false;
if(actualPause)
updateWatchInterface();
}

private void resetTimer() {
if(mTimerRunning)
pauseTimer(false);
mTimeLeftInMillis = mStartTimeInMillis;
updateCountDownText();
updateWatchInterface();
}

还将顶部部分修改为:

public void onClick(android.view.View view) {
if (mTimerRunning) {
pauseTimer(true);
}
//...Other code
}

这将确保当您按下重置按钮时 watch 界面不会更新以显示暂停的界面,但实际工作就像您先按下暂停然后重置一样。此外,我们还进行了检查,以确保如果暂停计时器实际上是暂停然后重置,则不会调用它。

选项2:如果不先调用pause就无法获取mStartTimeInMillis的引用,您可以使用SharedPreferences,并在每次启动计时器时保存开始时间,从而允许您按如下方式访问该变量:

//Put
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putString("time", *Your_value* );
editor.apply();

//Get
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String name = prefs.getString("time", "00:00");//"00:00" is the default value if the //entry doesn't exist.

我希望这些会有所帮助:)

关于java - 如何重置 CountDownTimer 而不必先暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57549887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com