我在这里定义倒数计时器。
然后,在onclick方法中为此变量定义新的countdowntimer:
public void showQuestion(int questionNumber){
questionTimer = new CountDownTimer(10500,1000) {
@Override
public void onTick(long millisUntilFinished) {
remainingTime.setText(Long.toString(millisUntilFinished/1000));
}
@Override
public void onFinish() {
remainingTime.setText("0");
showCorrectAnswer();
}
}.start();
}
然后我取消另一个按钮的onclick方法上的计时器;
public void selectOption(View view) {
questionTimer.cancel();
}
此时,它被成功取消。然后,我再次做同样的事情。 showQuestion方法以相同的方式工作。
public void showQuestion(int questionNumber){
questionTimer = new CountDownTimer(10500,1000) {
@Override
public void onTick(long millisUntilFinished) {
remainingTime.setText(Long.toString(millisUntilFinished/1000));
}
@Override
public void onFinish() {
remainingTime.setText("0");
showCorrectAnswer();
}
}.start();
}
成功启动。当我想取消另一个按钮onclick方法上的计时器时,它不起作用。没有任何错误。我希望它可以清楚。非常感谢。
最佳答案
您的代码的问题在于,在第一个计时器完成或取消之前,计时器可以多次启动(有时不是故意的)。在这种情况下,当您尝试取消它时,您只能取消第一次计时器。要解决此问题,只需检查计时器是否正在运行,如果正在运行,请等待其结束或取消。
定义一个全局参数:
布尔值timerRunning = false;
public void showQuestion(int questionNumber){
if (timerRunning) return;
timerRunning = true;
questionTimer = new CountDownTimer(10500,1000) {
@Override
public void onTick(long millisUntilFinished) {
remainingTime.setText(Long.toString(millisUntilFinished/1000));
}
@Override
public void onFinish() {
remainingTime.setText("0");
showCorrectAnswer();
timerRunning = false;
}
}.start();
}
您的选择选项方法可以更改为以下方法:在取消计时器之前检查计时器是否为空。
public void selectOption(View view) {
if (questionTimer != null) questionTimer.cancel();
timerRunning = false;
}