Приостановка отсчета времени на Android с помощью той же кнопки - PullRequest
0 голосов
/ 30 апреля 2018

Я нашел множество примеров того, как приостановить обратный отсчет в Android, но каждый из этих примеров использует более 1 кнопки (пауза, возобновление и отмена).

Я хочу иметь одну кнопку, чтобы при нажатии на нее запускался таймер, затем при повторном нажатии он приостанавливался (отмена исходного таймера, захват значения таймера) и возобновлялся при повторном нажатии (извлекая захваченное время из паузы) начать новый обратный отсчет).

У кого-нибудь есть пример, как этого добиться? Я попытался, если еще циклы в onClick слушателя кнопки. У меня есть очень грубый полуработающий пример;

if (gameOn == 1) {
 if((clkOnTimerBtn % 2)==0) {
    isPaused = true; // PAUSE COUNTDOWN TIMER
    resumeCountDownTimer(view, "pause");
 } else { // RESUME COUNTDOWN TIMER
   resumeCountDownTimer(view, "resume");
}

Проблема с вышесказанным заключается в том, что это выполняется в прослушивателе onclick кнопки, поэтому, если внутри моего resumeCountDownTimer создается новый CountDownTimer, то впоследствии невозможно получить доступ к таймеру для его отмены (пауза). Я также пытался найти способ отменить все обратные отсчеты времени, даже если бы мог, но я не смог найти никаких примеров или ссылок на это, так как это, по крайней мере, привело бы к желаемому поведению, даже если это не самый элегантный способ. ,

1 Ответ

0 голосов
/ 30 апреля 2018

Если я вас правильно понял, что-то вроде этого должно работать.

public class MainActivity extends AppCompatActivity {

CountDownTimer countDownTimer;
long duration = 100000; //This is the initial time,
long millisecondsLeft = 100000; // This is the time left. At the start it equales the duration.
boolean isCountDownTimerActive = false;
Button startButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    start = (Button) findViewById(R.id.startStop);
    final TextView timeLeft = (TextView) findViewById(R.id.timeLeft);

    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (isCountDownTimerActive) {
                if (countDownTimer != null)
                    countDownTimer.cancel();
                isCountDownTimerActive = false;
            } else {
                countDownTimer = new CountDownTimer(millisecondsLeft, 1000) {
                    @Override
                    public void onTick(long l) {
                        millisecondsLeft = l;
                        timeLeft.setText(" " + l);
                    }

                    @Override
                    public void onFinish() {

                    }
                };
                isCountDownTimerActive = true;
                countDownTimer.start();
            }
        }
    });
}

}

...