gpt4 book ai didi

java - 如何在Activity中正确设置CountDownTimer

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:41 25 4
gpt4 key购买 nike

请帮忙,我在一个需要暂停和恢复的方法中有一个倒数计时器。我设法通过在 onPause 中使用 .cancel() 来暂停计时器,但是我无法让它正确重启。我有两种情况:场景 1- 它暂停了,但在重新启动时似乎重新启动了两个倒数计时器,即使初始计时器已被取消也是如此。

    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();
}

我用谷歌搜索但似乎无法找到可行的解决方案。请帮助,除非此功能有效,否则 Galaxy 商店拒绝上传我的 apk。

最佳答案

事实是,CountDownTimer 是一个相对有限的类。它只有两个方法,start()cancel(),以及两个回调,onTick()onFinish()。没有内置的暂停/恢复功能。

我使用 TextView 设置了一个非常基本的 Activity 来可视化 CountDownTimer 的行为,它按照您想要的方式工作 - 离开 Activity 时暂停,返回时恢复。我在这里发布了简单的代码:

import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.util.Locale;

public class MainActivity extends AppCompatActivity {

private TextView mTextView;
private CountDownTimer mCountDownTimer;

private static final long INTERVAL = 1000L;
private long timeRemaining = 60000L;

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

mTextView = (TextView)findViewById(R.id.text_view);
}

@Override
protected void onResume() {
super.onResume();

mCountDownTimer = new CountDownTimer(timeRemaining, INTERVAL) {
@Override
public void onTick(long l) {
mTextView.setText(String.format(Locale.getDefault(), "%d sec.", l / 1000L));
timeRemaining = l;
}

@Override
public void onFinish() {
mTextView.setText("Done.");
}
};
mCountDownTimer.start();
}

@Override
protected void onPause() {
super.onPause();
mCountDownTimer.cancel();
}
}

我会首先检查您是否可以运行此代码,然后将基本想法集成到您的项目中。您基本上必须在 CountDownTimer 对象之外维护剩余时间。

关于java - 如何在Activity中正确设置CountDownTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39234721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com