这是我的第一个问题。
我需要在我的应用中实现六个countdown
timers
一个接一个地运行。首次完成时,下一个开始,依此类推。每次运行的Init time
取决于用户输入。问题是我需要为onTick()
和onFinish()
方法为每个countdown timer
运行代码添加不同的代码,而且,我不确定如何启动下一个counter
一个完成后。我正考虑在当前版本的counter
方法中调用下一个onFinish()
,但我无法弄清楚如何使用6 counters
执行此操作。
这是我的倒计时器类:
public class Counter extends CountDownTimer
{
public Counter(long millisInFuture, long countDownInterval)
{
super(millisInFuture, countDownInterval);
}
public void onTick(long millisUntilFinished)
{
//this code is the same for every counter
timer_view.setText(formatTime(millisUntilFinished));
//this code depends on specific counter running
output_view1.setText("My output here");
output_view2.setText("My output here");
output_view3.setText("My output here");
}
public void onFinish()
{
playSound(sound_id_1);
runMyMethod(user_input_1);
timerHasStarted = false;
}
}
我在同一个活动中开始我的计数器:
if(!timerHasStarted)
{
counter = new Counter(user_input1, 1000);
counter.start();
}
答案 0 :(得分:0)
您可能需要打破启动计时器功能并在onFinish()
中调用它。
public void startTimer(int counterId){
Counter counter = null;
switch(counterId){
case 0:
counter = new CounterOne(counterId,user_input1,1000);
break;
/* Counter 1-5 goes here*/
default:
break;
}
if(counter !=null ){
counter.start();
}
}
然后在onFinish()
中启动你的下一个计时器 public abstract class Counter extends CountDownTimer
{
private int counterId;
public Counter(int counterId /*counter id start with 0*/,long millisInFuture, long countDownInterval)
{
super(millisInFuture, countDownInterval);
this.counterId = counterId;
}
public abstract void onTick(long millisUntilFinished);
public void onFinish()
{
playSound(sound_id_1);
runMyMethod(user_input_1);
startTimer(this.counterId++);
}
}
public class CounterOne extends Counter{
public void onTick(long millisUntilFinished)
{
//counter 1 logic
}
}
/* Subclass others. eg. CounterTwo etc. */
答案 1 :(得分:0)
你永远不会设置
timerHasStarted
为真。它总是假的,所以...是的,一个接一个的计时器。在调用counter.start()之前将其设置为true,它应该可以工作。