使 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();
}
}
});
我正在尝试制作一个基本应用程序,我可以在其中按一个按钮开始倒计时,并且同一个按钮上的文本会在 "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();
}
}
});