使 countDownTimer 在按下按钮时暂停

Making a countDownTimer pause on button presses

我正在尝试制作一个基本应用程序,我可以在其中按一个按钮开始倒计时,并且同一个按钮上的文本会在 "START"、"PAUSE" 或 [=24] 之间变化=] 取决于按钮在按下时所处的状态。目前按下按钮什么都不做,我不确定为什么。

按钮以文本 "start"

开头

这是 onCreate() 中按钮侦听器的代码

'if' 语句中的

None 似乎永远是真的,即使按钮上的起始文本是 "start"

clockText = findViewById(R.id.timer);    
final Button startButton = findViewById(R.id.timerBtn);
    startButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            if(clockText.getText().toString().toLowerCase().equals("resume")) {
                startTimer(milliLeft);
                clock.start();
                startButton.setText("resume");
            }
            else if(clockText.getText().toString().toLowerCase().equals("pause")){
                clock.cancel();
                clockText.setText(formatTime);
                startButton.setText("resume");
            }
            else if(clockText.getText().toString().toLowerCase().equals("start")){
                startTimer(30000);
                startButton.setText("pause");
                clock.start();
            }

        }
    });

这里是startTimer()方法,

public int sec,min,fracSec;
public String formatTime;
public TextView clockText;
public CountDownTimer clock;
public long milliLeft;
public void startTimer(long time) {
    clock = new CountDownTimer(time, 100) {
        @Override
        public void onTick(long millisUntilFinished) {



                milliLeft = millisUntilFinished;
                min = (int) Math.floor(millisUntilFinished / 60000);
                sec = (int) (millisUntilFinished / 1000) % 60;
                fracSec = ((int) millisUntilFinished - sec * 1000) / 100;
                formatTime = min + ":" + sec + ":" + fracSec;
                clockText.setText(formatTime);

        }

        @Override
        public void onFinish() {
            clockText.setText("Finished");
        }
    };
}

你比较的是'clockText':

if(clockText.getText().toString().toLowerCase().equals("resume")) 

但是您在按钮中设置了值:

startButton.setText("resume");

更改条件

问题是因为您正在检查错误视图的文本值。您正在检查 clockText 而不是 startButton 的文本值,这是您正在设置 "resume"、"pause"、"start" 文本值的视图。您需要将代码更改为:

clockText = findViewById(R.id.timer);    
final Button startButton = findViewById(R.id.timerBtn);
    startButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            if(startButton.getText().toString().toLowerCase().equals("resume")) {
                startTimer(milliLeft);
                clock.start();
                startButton.setText("resume");
            }
            else if(startButton.getText().toString().toLowerCase().equals("pause")){
                clock.cancel();
                clockText.setText(formatTime);
                startButton.setText("resume");
            }
            else if(startButton.getText().toString().toLowerCase().equals("start")){
                startTimer(30000);
                startButton.setText("pause");
                clock.start();
            }

        }
    });