У меня есть приложение для Android с таймером. По умолчанию отображается как 00:00:00 (часы, минуты, секунды). Пользователь может нажать HMS и перетащить ползунок по кругу, чтобы изменить час, минуту или секунду, в зависимости от того, какой из них щелкнул. Я пытаюсь создать CountDownTimer, анализируя число из изменяемых TextViews в течение часов, минут и секунд, конвертируя все это в секунды, а затем запуская таймер; однако проблема в том, что отображается общее количество минут, а не 59 и меньше. Например, если я отсчитываю 3 часа. Он отображает 2 часа, 179 минут и 59 секунд. Когда я хочу, чтобы это было 2 часа. 59 минут, 59 секунд.
Я не уверен, почему я получаю эту ошибку. Я получаю все правильные значения в своем коде.
Вот мой код для setActionListener для моего CountDownTimer в моем классе, я сделал комментарий, где, по моему мнению, может быть ошибка.:
private void setActionListeners() {
number_text = (TextView) findViewById(R.id.hour_progress_number);
minute_text = (TextView) findViewById(R.id.minute_progress_number);
second_text = (TextView) findViewById(R.id.second_progress_number);
start_timer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// textViewShowTime.setTextAppearance(getApplicationContext(), R.style.normalText);
hourint = Integer.valueOf(number_text.getText().toString());
minuteint = Integer.valueOf(minute_text.getText().toString());
secondint = Integer.valueOf(second_text.getText().toString());
Log.i("YourActivity", "Hours: " + hourint);
Log.i("YourActivity", "Minutes: " + minuteint);
Log.i("YourActivity", "Seconds: " + secondint);
totalTimeCountInMilliseconds = ((hourint*60*60) +(minuteint*60) + (secondint)) * 1000; // time count for 3 minutes = 180 seconds
timeBlinkInMilliseconds = totalTimeCountInMilliseconds/1000;
countDownTimer = new CountDownTimer(totalTimeCountInMilliseconds, 500) {
// 500 means, onTick function will be called at every 500 milliseconds
@Override
public void onTick(long leftTimeInMilliseconds) {
long seconds = leftTimeInMilliseconds / 1000;
mSeekArc.setVisibility(View.INVISIBLE);
if ( leftTimeInMilliseconds < timeBlinkInMilliseconds ) {
// textViewShowTime.setTextAppearance(getApplicationContext(), R.style.blinkText);
// change the style of the textview .. giving a red alert style
if ( blink ) {
number_text.setVisibility(View.VISIBLE);
minute_text.setVisibility(View.VISIBLE);
second_text.setVisibility(View.VISIBLE);
// if blink is true, textview will be visible
} else {
number_text.setVisibility(View.INVISIBLE);
minute_text.setVisibility(View.INVISIBLE);
second_text.setVisibility(View.INVISIBLE);
}
blink = !blink; // toggle the value of blink
}
second_text.setText(String.format("%02d", seconds % 60));
//THE ERROR MIGHT BE HERE FOR THE MINUTE
minute_text.setText(String.format("%02d", seconds / 60));
number_text.setText(String.format("%02d", seconds / 3600)); // format the textview to show the easily readable format
}
@Override
public void onFinish() {
// this function will be called when the timecount is finished
//textViewShowTime.setText("Time up!");
number_text.setVisibility(View.VISIBLE);
minute_text.setVisibility(View.VISIBLE);
second_text.setVisibility(View.VISIBLE);
mSeekArc.setVisibility(View.VISIBLE);
}
}.start();
}
});
Я пытался вмешиваться в это значение и какое-то время находить его значение, но это действительно постоянная проблема, и она просто не будет отображаться должным образом.
Вроде все делаю правильно:
Таймер обратного отсчета в формате ЧЧ:ММ:СС в Android
В чем именно проблема и как ее можно исправить?
Вот мой полный код для класса, если это необходимо: