使用相同的按钮暂停 Android 倒数计时器

Pausing a Android countdowntimer with same button

我在 Android 中找到了很多关于如何暂停倒数计时器的示例,但是这些示例中的每一个都使用了不止一个按钮(暂停、恢复和取消)。

我想要一个按钮,当我按下它时计时器开始,然后当我再次按下它时它暂停(取消原始计时器,捕获计时器值)并在再次单击时恢复(从捕获的时间暂停以开始新的倒计时)。

有没有人有如何实现这一点的例子?我已经尝试过 if else 在按钮的 onClick 侦听器中循环。我有一个非常粗糙的半工作示例;

if (gameOn == 1) {
 if((clkOnTimerBtn % 2)==0) {
    isPaused = true; // PAUSE COUNTDOWN TIMER
    resumeCountDownTimer(view, "pause");
 } else { // RESUME COUNTDOWN TIMER
   resumeCountDownTimer(view, "resume");
}

上面的问题是这是在按钮 onclick 侦听器中执行的,因此如果在我的 resumeCountDownTimer 中创建了一个新的 CountDownTimer,则以后无法访问计时器以取消它(暂停)。我也尝试过寻找一种方法来取消所有倒数计时器,如果可以的话会很混乱,但是我找不到任何示例或参考资料来这样做,因为即使这不是最优雅的方式,它至少也会获得所需的行为.

如果我没理解错的话,像这样的东西应该有用。

public class MainActivity extends AppCompatActivity {

CountDownTimer countDownTimer;
long duration = 100000; //This is the initial time,
long millisecondsLeft = 100000; // This is the time left. At the start it equales the duration.
boolean isCountDownTimerActive = false;
Button startButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    start = (Button) findViewById(R.id.startStop);
    final TextView timeLeft = (TextView) findViewById(R.id.timeLeft);

    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (isCountDownTimerActive) {
                if (countDownTimer != null)
                    countDownTimer.cancel();
                isCountDownTimerActive = false;
            } else {
                countDownTimer = new CountDownTimer(millisecondsLeft, 1000) {
                    @Override
                    public void onTick(long l) {
                        millisecondsLeft = l;
                        timeLeft.setText(" " + l);
                    }

                    @Override
                    public void onFinish() {

                    }
                };
                isCountDownTimerActive = true;
                countDownTimer.start();
            }
        }
    });
}

}