У меня есть таймер обратного отсчета, у меня есть кнопка, которая приостанавливает ее, но мне нужно, когда вы нажимаете на кнопку, продолжайте обратный отсчет. Я искал, но не мог связать эту функцию. Как это можно сделать? Это мой код, я только удалось перезапустить его, но не продолжать:Продолжить таймер обратного отсчета после паузы
private TextView cuentaRegresiva;
private Button btnEmpezar;
private CountDownTimer countDownTimer;
private boolean timerHasStarted = false;
private long startTime = 30 * 1000;
private final long interval = 1 * 1000;
private long restante;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
btnEmpezar.setOnClickListener(iniciar);
}
OnClickListener iniciar=new OnClickListener() {
@Override
public void onClick(View arg0) {
if (!timerHasStarted && !pausado) {
countDownTimer.start();
timerHasStarted = true;
btnEmpezar.setText("Pause");
pausado=false;
}
else if(timerHasStarted && !pausado){
countDownTimer.cancel();
timerHasStarted = false;
btnEmpezar.setText("Restart");
pausado=true;
}
else if(!timerHasStarted && pausado){
countDownTimer2.start();
timerHasStarted = true;
btnEmpezar.setText("Pause");
pausado=false;
}
}
};
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
cuentaRegresiva.setText("Tiempo!");
}
@Override
public void onTick(long millisUntilFinished) {
cuentaRegresiva.setText("" + millisUntilFinished/1000);
}
}
public class MyCountDownTimer2 extends CountDownTimer {
public MyCountDownTimer2(long restante, long interval) {
super(restante, interval);
}
@Override
public void onFinish() {
cuentaRegresiva.setText("Tiempo!");
}
@Override
public void onTick(long millisUntilFinished) {
cuentaRegresiva.setText("" + millisUntilFinished/1000);
}
}
Я думал о принятии millisUntilFinished переменной, но не работает. В любом случае, я думаю, что путь близок к этому.
документация не слишком ясно, можно ли использовать _start() _ после _cancel() _ снова. Я предполагаю, что это не сработает. Хотя то, что вы могли бы попробовать, это хранить значение _millisUntilFinished_ во время работы таймера. Затем нужно перезапустить таймер, создать новый объект таймера и использовать это значение как продолжительность. – harism
Простой отмена и снова запустить таймер с последнего обратного отсчета или передать состояние паузы таймера классу таймера и продолжать проверять это на timertask и просто пропустить обновление. Когда возобновляется сброс состояния. –