Timer/hourglass 不会停止

Timer/hourglass wont stop

我用计时器尝试了同样的事情,但仍然不起作用

每次我尝试启动计时器时,它都能正常工作 但是当我尝试再次点击按钮并取消倒计时时, 它没有停止或取消。

这是我的代码:

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");
    }

}

每次调用方法 timer 时,都会创建 class Hourglass 的新实例,并在该实例上调用 startTimerstopTimer .您需要将调用 startTimerhourglass 存储在方法外部,例如在字段中,然后对其调用 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");
    }

}

试试这个,可能对你有帮助。

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

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

                }
            };
            hourglass.startTimer();
            isBooking = true;
        } else {
            if (!hourglass.isRunning()) {
                dialogUtils.askDialog("Are you sure you want to cancel?", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        listener.stopBooking();
                        isBooking = false;
                        hourglass.stopTimer();
                        btnBooking.setText("BOOK");
                    }
                }, null);
            } else {
                isBooking = false;
                hourglass.stopTimer();
                btnBooking.setText("BOOK");
            }
        }