3
请帮忙,我有一个需要暂停和恢复的方法中的倒数计时器。 我设法通过使用onPause中的.cancel()来暂停计时器,但是我无法让它正常重启。 我有两种情况: 情景1-暂停,但重新启动后,即使初始计时器被取消,似乎也会重新启动两个倒计时计时器。如何在Activity中正确设置CountDownTimer
public void playAgain (View view) {
score = 0;
numberOfQuestions = 0;
timerTextView.setText("60s");
pointsTextView.setText("0/0");
resultTextView.setText("");
playAgainButton.setVisibility(View.INVISIBLE);
returnToMenu.setVisibility(View.INVISIBLE);
resultDisplayTextView.setVisibility(View.INVISIBLE);
countDownText.setVisibility(View.VISIBLE);
button0.setVisibility(View.INVISIBLE);
button1.setVisibility(View.INVISIBLE);
button2.setVisibility(View.INVISIBLE);
button3.setVisibility(View.INVISIBLE);
sumTextView.setVisibility(View.INVISIBLE);
countDownTimer = new CountDownTimer(millisInFuture, countDownInterval) {
@Override
public void onTick(long timeRemain) {
millisInFuture = timeRemain;
countDownText.setText(String.valueOf(timeRemain/1000 - 60));
if (timeRemain <= 61000) {
timerTextView.setText(String.valueOf(timeRemain/1000) + "s");
button0.setEnabled(true);
button1.setEnabled(true);
button2.setEnabled(true);
button3.setEnabled(true);
button0.setVisibility(View.VISIBLE);
button1.setVisibility(View.VISIBLE);
button2.setVisibility(View.VISIBLE);
button3.setVisibility(View.VISIBLE);
sumTextView.setVisibility(View.VISIBLE);
countDownText.setVisibility(View.INVISIBLE);
}
}
@Override
public void onFinish() {
timerTextView.setText("0s");
if (score > 0) {
percentage = score * 100/numberOfQuestions;
} else {
percentage = 0;
}
button0.setEnabled(false);
button1.setEnabled(false);
button2.setEnabled(false);
button3.setEnabled(false);
playAgainButton.setVisibility(View.VISIBLE);
returnToMenu.setVisibility(View.VISIBLE);
resultDisplayTextView.setVisibility(View.VISIBLE);
resultTextView.setText(" ");
}
}.start();
generateQuestion();
}
@Override
public void onPause() {
countDownTimer.cancel();
super.onPause();
}
@Override
public void onResume() {
super.onResume();
CountDownTimer countDownTimer1 = new CountDownTimer(millisInFuture, countDownInterval) {
@Override
public void onTick(long timeRemain) {
millisInFuture = timeRemain;
countDownText.setText(String.valueOf(timeRemain/1000 - 60));
if (timeRemain <= 61000) {
timerTextView.setText(String.valueOf(timeRemain/1000) + "s");
button0.setEnabled(true);
button1.setEnabled(true);
button2.setEnabled(true);
button3.setEnabled(true);
button0.setVisibility(View.VISIBLE);
button1.setVisibility(View.VISIBLE);
button2.setVisibility(View.VISIBLE);
button3.setVisibility(View.VISIBLE);
sumTextView.setVisibility(View.VISIBLE);
countDownText.setVisibility(View.INVISIBLE);
}
}
@Override
public void onFinish() {
timerTextView.setText("0s");
if (score > 0) {
percentage = score * 100/numberOfQuestions;
} else {
percentage = 0;
}
button0.setEnabled(false);
button1.setEnabled(false);
button2.setEnabled(false);
button3.setEnabled(false);
playAgainButton.setVisibility(View.VISIBLE);
returnToMenu.setVisibility(View.VISIBLE);
resultDisplayTextView.setVisibility(View.VISIBLE);
resultTextView.setText(" ");
}
}.start();
}
第二种情况只是系统崩溃:
public void playAgain (View view) {
score = 0;
numberOfQuestions = 0;
timerTextView.setText("60s");
pointsTextView.setText("0/0");
resultTextView.setText("");
playAgainButton.setVisibility(View.INVISIBLE);
returnToMenu.setVisibility(View.INVISIBLE);
resultDisplayTextView.setVisibility(View.INVISIBLE);
countDownText.setVisibility(View.VISIBLE);
button0.setVisibility(View.INVISIBLE);
button1.setVisibility(View.INVISIBLE);
button2.setVisibility(View.INVISIBLE);
button3.setVisibility(View.INVISIBLE);
sumTextView.setVisibility(View.INVISIBLE);
countDownTimer = new CountDownTimer(millisInFuture, countDownInterval) {
@Override
public void onTick(long timeRemain) {
millisInFuture = timeRemain;
countDownText.setText(String.valueOf(timeRemain/1000 - 60));
if (timeRemain <= 61000) {
timerTextView.setText(String.valueOf(timeRemain/1000) + "s");
button0.setEnabled(true);
button1.setEnabled(true);
button2.setEnabled(true);
button3.setEnabled(true);
button0.setVisibility(View.VISIBLE);
button1.setVisibility(View.VISIBLE);
button2.setVisibility(View.VISIBLE);
button3.setVisibility(View.VISIBLE);
sumTextView.setVisibility(View.VISIBLE);
countDownText.setVisibility(View.INVISIBLE);
}
}
@Override
public void onFinish() {
timerTextView.setText("0s");
if (score > 0) {
percentage = score * 100/numberOfQuestions;
} else {
percentage = 0;
}
button0.setEnabled(false);
button1.setEnabled(false);
button2.setEnabled(false);
button3.setEnabled(false);
playAgainButton.setVisibility(View.VISIBLE);
returnToMenu.setVisibility(View.VISIBLE);
resultDisplayTextView.setVisibility(View.VISIBLE);
resultTextView.setText(" ");
}
}.start();
generateQuestion();
}
@Override
public void onPause() {
countDownTimer.cancel();
super.onPause();
}
@Override
public void onResume() {
super.onResume();
countDownTimer.start();
}
我用Google搜索,似乎无法找到一个有效的解决方案。 请帮忙,银河商店拒绝上传我的apk,除非此功能正常。
感谢它的工作原理,但我现在遇到timeRemaining变量的问题,它应该重置为60000时按playAgain。我尝试在playAgain方法中重置它,但它不起作用。我已经在简历中重置了它,但是它在60秒的时间内恢复,而不是剩下的时间。每次我现在玩的时候都是从timeRemain = l开始的。 –
我甚至尝试在onFinnish中重置它 –
我甚至尝试创建一个方法调用timeRemain –