我的活动中有两个倒计时器。从10秒开始倒计时,从5秒开始倒数。当我点击倒计时按钮时,计时器1启动。当这个计时器结束时,我希望timer2启动,问题是timer2永远不会被执行。
我有2个本地var跟踪正在执行的计时器,当我调试时,我看到这些变量的正确值已设置,但仍然没有执行第二个定时器。
这是我的CountdownTimer课程:
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
if (ctHasStarted) {
ctHasStarted = false;
timerValue.setText("00:00:000");
countDownTimer2.start();
ct2HasStarted = true;
}
if (ct2HasStarted) {
ct2HasStarted = false;
timerValue2.setText("00:00:000");
countDownTimer.start();
ctHasStarted = true;
}
}
@Override
public void onTick(long millisUntilFinished) {
int secs = (int) (millisUntilFinished / 1000);
int mins = secs / 60;
secs = secs % 60;
int milliseconds = (int) (millisUntilFinished % 1000);
if (ctHasStarted)
timerValue.setText(String.format("%02d",mins) + ":"
+ String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds));
if (ct2HasStarted)
timerValue2.setText(String.format("%02d",mins) + ":"
+ String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds));
}
}
ctHasStarted和ct2HasStarted是布尔值,用于跟踪正在运行的计时器。正如我在调试时所说,达到了countDownTimer.start()和countDownTimer2.start()这两行。但是timer2的文本字段永远不会更新。甚至行timerValue2.setText(“00:”00:00“)都不起作用。
我在活动的onCreate中初始化两个计时器,如:
countDownTimer = new MyCountDownTimer(ctStartTime, interval);
countDownTimer2 = new MyCountDownTimer(ct2StartTime, interval);
我注意到的另一件奇怪的事情是,当我将onTick事件中的 if(ct2HasStarted)更改为 else 时,timerValue2.setText显示倒计时。但是在第二次完成之后,尽管在onFinish事件中第一次开始呼叫,但第一次没有被执行。
我想我想念一些东西,但我不知道我想念的是什么。有什么建议吗?
答案 0 :(得分:0)
我在我的活动中添加了一个新函数,它设置了一些变量。像这样:
public void startTimer(int counterId){
CountDownTimer counter = null;
if (counterId == 1) {
ctHasStarted = true;
timerValue2.setText("00:00:000");
timerValue.setText("00:00:000");
ct2HasStarted = false;
counter = new MyCountDownTimer(ctStartTime, interval);
}
if (counterId == 2) {
ct2HasStarted = true;
timerValue2.setText("00:00:000");
timerValue.setText("00:00:000");
ctHasStarted = false;
counter = new MyCountDownTimer(ct2StartTime, interval);
}
if(counter !=null ){
counter.start();
}
}
我在我的柜台改变了我的onFinish活动:
@Override
public void onFinish() {
if (ctHasStarted) {
startTimer(2);
return;
}
if (ct2HasStarted) {
startTimer(1);
return;
}
}
有效。 (对我来说至少)。