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
的新实例,并在该实例上调用 startTimer
或 stopTimer
.您需要将调用 startTimer
的 hourglass
存储在方法外部,例如在字段中,然后对其调用 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");
}
}
我用计时器尝试了同样的事情,但仍然不起作用
每次我尝试启动计时器时,它都能正常工作 但是当我尝试再次点击按钮并取消倒计时时, 它没有停止或取消。
这是我的代码:
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
的新实例,并在该实例上调用 startTimer
或 stopTimer
.您需要将调用 startTimer
的 hourglass
存储在方法外部,例如在字段中,然后对其调用 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");
}
}