CountDownTimer and textView - not displaying time correctly. Hello! When you press the start button, the timer will return. But when you press the same button to pause, it is the pointer in the screenshot that does not display the seconds correctly. Jumps from 59 to 09, from 58 to 08, and so on. Help fix.
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);
}


It work for me
variable and onCreate:
StartTimer():
UpdateCountDownText():
resetTimer: