首页 > 解决方案 > 计时器/沙漏不会停止

问题描述

我用计时器尝试了同样的事情,但仍然无法正常工作

每次我尝试启动计时器时,它都会起作用,但是当我尝试再次单击按钮并取消倒计时时,它不会停止或取消。

这是我的代码:

public void timer(final Button btnBooking) {

    Hourglass hourglass = new Hourglass(5000, 1000) {
        @Override public void onTimerTick(long timeRemaining) { // Update UI
            btnBooking.setText("CANCEL " + "(" + timeRemaining + ")");
        }

        @Override public void onTimerFinish() { // Timer finished
            if (isBooking) {
                btnBooking.setText("CANCEL");
            }
            listener.startBooking();
        }
    };

    if (!isBooking) {
        hourglass.startTimer();
        isBooking = true;
    } else {
        isBooking = false;
        hourglass.stopTimer();
        btnBooking.setText("BOOK");
    }

}

标签: androidcountdowntimerhourglass

解决方案


每次调用 methodtimer时,都会创建 class 的新实例Hourglass,然后调用startTimeror stopTimer。您需要将hourglass调用的方法存储startTimer在方法之外,例如在字段中,然后调用stopTimer它以获得预期的行为。

所以,你会做这样的事情:

private Hourglass hourglass;
public void timer(final Button btnBooking) {
    if (!isBooking) {
        hourglass = new Hourglass(5000, 1000) {
          @Override public void onTimerTick(long timeRemaining) { // Update UI
              btnBooking.setText("CANCEL " + "(" + timeRemaining + ")");
          }

          @Override public void onTimerFinish() { // Timer finished
              if (isBooking) {
                  btnBooking.setText("CANCEL");
              }
              listener.startBooking();
          }
        };
        hourglass.startTimer();
        isBooking = true;
    } else {
        isBooking = false;
        hourglass.stopTimer();
        btnBooking.setText("BOOK");
    }

}

推荐阅读