多个CountDown Timer一个接一个地运行

时间:2014-02-04 14:30:37

标签: android countdowntimer

这是我的第一个问题。 我需要在我的应用中实现六个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();
}

2 个答案:

答案 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,它应该可以工作。