繁体   English   中英

CountDownTimer 和 textView - 时间显示不正确

[英]CountDownTimer and textView - not displaying time correctly

CountDownTimer 和 textView - 时间显示不正确。 您好,当您按下开始按钮时。 计时器将返回,但是当您按下相同的按钮暂停时。 是截图中的指针没有正确显示秒数,从59跳到09,从58跳到08。等等。 帮助修复。

public class MainActivity extends AppCompatActivity implements NumberPicker.OnValueChangeListener {

private TextView textView1;
private Button mButtonStartPause;
private Button mButtonReset;
private CountDownTimer mCountDownTimer;
private boolean mTimerRunning;
private long mStarTimeInMillis;
private long mTimeLeftInMillis;


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

    // NumberPicker
    Button buttonSetTime = findViewById(R.id.buttonSetTime);// on click of button display the dialog
    buttonSetTime.setOnClickListener(v -> show());

    textView1 = findViewById(R.id.textView1);
    mButtonStartPause = findViewById(R.id.buttonStart);
    mButtonReset = findViewById(R.id.buttonStop);

    mButtonStartPause.setOnClickListener(view -> {

        setTime();

        if(mTimerRunning)
        {
            pauseTimer();
        }
        else {
            startTimer();
        }
    });

    mButtonReset.setOnClickListener(view -> {
        resetTimer();
    });

    updateCountDownText();
}
@SuppressLint("SetTextI18n")
private void setTime()
{
    String input = textView1.getText().toString();
    String str1 = input.substring(0, 2);
    String str2 = input.substring(4, 5);
    long number1 = Long.parseLong(str1);
    long number2 = Long.parseLong(str2);
    long sumMillisMin = number1 *60000;
    long sumMillisSec = number2 *1000;
    long millisInput = sumMillisMin + sumMillisSec;
    mStarTimeInMillis = millisInput;
    mTimeLeftInMillis = mStarTimeInMillis;
    textView.setText(Long.toString(mTimeLeftInMillis));
}
@SuppressLint("SetTextI18n")
private void updateCountDownText()
{
    long minutes = (mTimeLeftInMillis / 1000) / 60;
    long seconds = (mTimeLeftInMillis / 1000) % 60;
    String timeLeftFormatted = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
    textView1.setText(timeLeftFormatted);
}

private void startTimer()
{
    mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 500) {
        @Override
        public void onTick(long millisUntilFinished)
        {
            mTimeLeftInMillis = millisUntilFinished;
            updateCountDownText();
        }
        @Override
        public void onFinish()
        {
            mTimerRunning = false;
            mButtonStartPause.setText("Start");
            mButtonStartPause.setVisibility(View.INVISIBLE);
            mButtonReset.setVisibility(View.VISIBLE);
        }
    }.start();

    mTimerRunning = true;
    mButtonStartPause.setText("Pause");
    mButtonReset.setVisibility(View.INVISIBLE);
}
private void pauseTimer()
{
    mCountDownTimer.cancel();
    mTimerRunning = false;
    mButtonStartPause.setText("Start");
    mButtonReset.setVisibility(View.VISIBLE);
}
private void resetTimer()
{
    mTimeLeftInMillis = mStarTimeInMillis;
    updateCountDownText();
    mButtonReset.setVisibility(View.INVISIBLE);
    mButtonStartPause.setVisibility(View.VISIBLE);
}

在此处输入图像描述
在此处输入图像描述

它对我有用

变量和onCreate:

 private static final long START_TIME_IN_MILLIS = 60000;
private CountDownTimer mCountDownTimer;
private boolean mTimerRunning = false;
private long mTimeLeftInMillis = START_TIME_IN_MILLIS;
MaterialButton timer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    timer = findViewById(R.id.counter);

  timer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ResetTimer();
            StartTimer();
        }
    });

    StartTimer();

}

开始计时器():

private void StartTimer() {

    mCountDownTimer = null;

    mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            mTimeLeftInMillis = millisUntilFinished;
            UpdateCountDownText();
        }

        @Override
        public void onFinish() {
            timer.setEnabled(true);

            timer.setText("start");
            mTimerRunning = true;


        }
    }.start();

}

更新计数向下文本():

    private void UpdateCountDownText() {
    int min = (int) ((mTimeLeftInMillis / 1000) / 60);
    int sec = (int) ((mTimeLeftInMillis / 1000) % 60);

    String timeleftformated = String.format(Locale.getDefault(), "%02d:%02d", min, sec);
    timer.setText(timeleftformated);

}

重置定时器:

private void ResetTimer() {
    mCountDownTimer.cancel();
    mTimeLeftInMillis = START_TIME_IN_MILLIS;
    UpdateCountDownText();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM