我有一个问题,多次重复倒数计时器,在我的情况下12次。我制作了两个倒计时器,一个用于倒计时,一个用于暂停,效果很好。问题是当暂停结束时我希望倒计时倒计时再次自动开始,直到12轮暂停结束。 我用于循环。有没有更好的方法?
以下是代码:当用户点击按钮倒计时开始时
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
long roundtime= Long.parseLong(String.valueOf(msg1))*1000;//user has picked roundtime
Counting timer = new Counting(roundtime, 100);//class Counting extends CountdownTimer
for(int i=0;i<12;i++){
timer.start(); // It goes just ones!
}
}
倒数计时器:
class Counting extends CountDownTimer {
public Counting(long roundtime, long countDownInterval) {
super(roundtime, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
textView.setText("" + String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
@Override
public void onFinish() { // When roundtime is finished,start pause time!
int seconds = msg1 % 60;
int minutes = (msg1 / 60) % 60;
textView.setText(String.format("%02d : %02d", minutes, seconds));
long pause= Long.parseLong(String.valueOf(msg2))*1000; //user has picked pause time
Counting2 timer2 = new Counting2(pause, 100);
timer2.start();
}
}
class Counting2 extends CountDownTimer {
public Counting2(long pause, long countDownInterval) {
super(pause, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
textView2.setText("" + String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
@Override
public void onFinish() {
int seconds = msg2 % 60;
int minutes = (msg2 / 60) % 60;
textView2.setText(String.format("%02d : %02d", minutes, seconds));
}
}
});
}
答案 0 :(得分:0)
首先,您希望它循环12次。 这不是问题,但是,当它只循环11次时,你会感谢我。
应该是
for(int i=0;i<=12;i++){
timer.start(); // It goes just ones!
}
由于我不知道Counting2
的实现,它似乎挂起了那里的启动功能。我不知道它是否被覆盖了。如果您使用类似的onFinish
方法,则这是由于原始Counting timer
上的递归回调所致。因此,它会在中间循环一段等待时间(它不会像结果那样快速地获得堆栈溢出)。
答案 1 :(得分:0)
尝试忙碌等待以完成上一个计时器,然后再次启动它,它将会执行12次。
for(int i=0;i<12;i++){
while(!previousTimerActive);
timer.start();
previousTimerActive = true;
}
在Counting2
的{{1}}中设置指标onFinish()
。现在,您只需要看看您希望这个previousTimerActive = false;
以什么方式成为“全局”(因此可以从您的活动和您的班级boolean previousTimerActive
访问它)。您可以在SharedPreferences中获取并设置它,或者使用第{} {3}}之类的第三方工具将其值从一个发送到另一个。