Задать вопрос
Manitu_PC
@Manitu_PC

Цикл повторения раундов в интервальном таймере — Why does not it work?

Идея в том, что два таймера работают последовательно, и повторяется n раз в зависимости от значения numberRound. На деле последовательность срабатывает только 1 раз, а mTextRound показывает значение numberRound+1.
Вот код:
public void TimerWorkOut() {
        new CountDownTimer(secWork, 1000) {

            public void onTick(long millisUntilFinished) {
                mTextWork.setText(" " + millisUntilFinished / 1000);
            }

            public void onFinish() {
                mTextWork.setText("Rest!");
                TimerRest();
            }
        }.start();
    }

    public void TimerRest() {
        new CountDownTimer(secRest, 1000) {

            public void onTick(long millisUntilFinished) {
                mTextRest.setText(" " + millisUntilFinished / 1000);
            }

            public void onFinish() {
                mTextRest.setText("Just do it!");
            }
        }.start();
    }

    // Кнопки

    public void ClickStart(View view) {
        secWork = pickerSecWork.getValue() * 1000;
        secRest = pickerSecRest.getValue() * 1000;
        numberRound = pickerRound.getValue();
        while (n <= numberRound){
            TimerWorkOut();
            mTextRound.setText("0" + n);
            n = n + 1;
        }
    }

    // слушатели NumberPicker, и передача данных в TextWiew

    NumberPicker.OnValueChangeListener onValueChangedWork = new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            if (!mIsRunning) {
                mTextWork.setText(intToTime(newVal));
                mCurrentPeriod = newVal;
            }
        }
    };

    NumberPicker.OnValueChangeListener onValueChangedRest = new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            if (!mIsRunning) {
                mTextRest.setText(intToTime(newVal));
                mCurrentPeriod = newVal;
            }
        }
    };

    private String intToTime(int i) {
        return (new SimpleDateFormat("ss")).format(new Date(i * 1000));
    }
}
  • Вопрос задан
  • 164 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Manitu_PC
@Manitu_PC Автор вопроса
Вот способ решения: счетчик раундов перенесен в метод onFinish TimerRest. Выглядит это так:
public void TimerRest() {
        new CountDownTimer(secRest, 1000) {

            public void onTick(long millisUntilFinished) {
                mTextRest.setText(" " + millisUntilFinished / 1000);
            }

            public void onFinish() {
                mTextRest.setText("Just do it!");
                if(n < numberRound) {
                    TimerWorkOut();
                    n++;
                }
                mTextRound.setText("№" + n);
            }
        }.start();
    }

    // Кнопки
    public void ClickStart(View view) {
        secWork = pickerSecWork.getValue() * 1000;
        secRest = pickerSecRest.getValue() * 1000;
        numberRound = pickerRound.getValue();
        TimerWorkOut();
        mTextRound.setText("№" + n);
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы