我在这里定义倒数计时器。



然后,在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;

}

10-06 05:33
查看更多