2015-09-29 3 views
0

У меня есть два countdowntimers в моей деятельности. Один набор для обратного отсчета от 10 секунд второй - от 5 секунд. Когда я нажимаю кнопку обратного отсчета, запускается таймер 1. Когда этот таймер заканчивается, я хочу, чтобы таймер2 запустился, проблема в том, что timer2 никогда не подвергается эксцессу.Android два CountDownTimers, выполняющих один за другим

У меня есть 2 локальных var, которые отслеживают, какой таймер выполняется, когда я отлаживаю, я вижу, что правильное значение для этих vars установлено, но все же второй таймер не выполняется.

Вот мой 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); 

Другого странного, что я заметил что при изменении строки if (ct2HasStarted) в onTick-событии до еще timerValue2.setText-показывает обратный отсчет. Но после того, как второе время будет завершено, первое не будет выполнено, несмотря на вызов для запуска в первый раз в событии onFinish.

Я думаю, что я пропустите что-то, но я не знаю, чего я пропущу. Какие-либо предложения?

ответ

0

Оке, я нашел его. Я немного переработал свой код, но самое главное - добавить в раздел onFinish.

Я добавил новую функцию в свою деятельность, которая устанавливает некоторые vars. как так:

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; 
     } 
    } 

Это работает. (по крайней мере, для меня).