Android倒计时器,退出后不会重新连接到活动

时间:2018-02-13 02:38:03

标签: android timer

我正在创建一个应用程序来跟踪扑克锦标赛。

有了这个,我使用自定义CountDown计时器来跟踪我的锦标赛回合。

班级在

之下
public class TournamentTimer extends CountDownTimer {
private int mRound;
private TextView mBlindsTextView;
private TextView mTimeTextView;
private TextView mRoundTextView;
private Context mContext;
private View mrootView;
private int numberOfBreaks = 0;

public TournamentTimer(Context context, long timeLimit, int round, View rootView) {
    super(timeLimit, 1000);
    mContext = context;
    mRound = round;
    mBlindsTextView = rootView.findViewById(R.id.blinds);
    mTimeTextView = rootView.findViewById(R.id.timer);
    mRoundTextView = rootView.findViewById(R.id.roundTracker);
    mRoundTextView.setText(String.format(mContext.getApplicationContext().getString(R.string.Round), mRound));
    mBlindsTextView.setText(mContext.getString(R.string.Blinds, Blinds.DEFAULT_BLINDS1500[mRound - 1], Blinds.DEFAULT_BLINDS1500[mRound - 1] * 2));
    mrootView = rootView;
    mTimeTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            start();
        }
    });
}


@Override
public void onTick(long millisUntilFinished) {
    long minutesLeft = millisUntilFinished / 60000;
    long secondsLeft = (millisUntilFinished % 60000) / 1000;
    String timeLeft;
    if (secondsLeft >= 10)
        timeLeft = mContext.getString(R.string.TimeLeft, minutesLeft, secondsLeft);
    else timeLeft = mContext.getString(R.string.TimeLeftWithPadding, minutesLeft, secondsLeft);
    mTimeTextView.setText(timeLeft);
}

public void onFinish() {
    mRound = mRound + 1;
    mRoundTextView.setText(String.format(mContext.getApplicationContext().getString(R.string.Round), mRound - numberOfBreaks));
    mBlindsTextView.setText(mContext.getString(R.string.Blinds, Blinds.DEFAULT_BLINDS1500[mRound - 1 - numberOfBreaks], Blinds.DEFAULT_BLINDS1500[mRound - 1 - numberOfBreaks] * 2));
    //Will Keep cycling through rounds until the tournament is manually ended.
    if (mRound % 4 == 0) {
        mRoundTextView.setText(R.string.Break);
        numberOfBreaks++;

    }
    this.start();
}
}

我在创建显示计时器的活动时会创建一个新的计时器。

我在活动停止时取消计时器。

当我恢复活动时,我重新启动计时器,然后启动,但屏幕上的视图不会更新。

有什么建议吗?

更新

我能够让它发挥作用。我添加了一个剩余毫秒的变量,并在每个刻度上更新它。

然后在我的主要活动中,我抓住了这个新变量以及onStop中的圆形变量(也取消了计时器)并在创建时创建了一个带有这些值的新计时器。

1 个答案:

答案 0 :(得分:0)

我能够让它发挥作用。我添加了一个剩余毫秒的变量,并在每个刻度上更新它。

然后在我的主要活动中,我抓住了这个新变量以及onStop中的圆形变量(也取消了计时器)并在创建时创建了一个带有这些值的新计时器