в моем приложении Я использую CountDownTimer и хочу, чтобы пользователи могли сбросить данные в приложении и начать новый. Проблема, с которой я столкнулась, заключается в том, что если вы запустите таймер, скажем, 3 минуты, а затем через короткое время вы вызываете мою функцию сброса, чтобы вернуть все оценки к их начальным значениям, а затем запустите новый таймер, скажем, 10 минут. ... таймер сразу же поднимает, где он остановился, говоря 2:24, 2:23, 2:22 .....Отмена андроида CountDownTimer
Все, что я читал везде, говорит, что вы вызываете countdowntimername.cancel(); а затем установите countdowntimername = null;
Вот как я это делаю, и это совсем не работает. Должен быть более эффективный способ убить этих таймеров? Есть идеи?
Соус:
private void toggleTimer() {
if (timerStarted == false) {
final CountDownTimer countDownTimer = new CountDownTimer(startTime, interval) {
public void onTick(long millisUntilFinished) {
if (timerPaused == true) {
cancel();
} else {
timeRemaining = millisUntilFinished;
long remainder = millisUntilFinished;
minuteTens = df.format(millisUntilFinished/600000);
remainder = remainder - (Integer.valueOf(minuteTens) * 600000);
minuteOnes = df.format(remainder/60000);
remainder = remainder - (Integer.valueOf(minuteOnes) * 60000);
secondTens = df.format(remainder/10000);
remainder = remainder - (Integer.valueOf(secondTens) * 10000);
secondOnes = df.format(remainder/1000);
setCountdownText();
}
}
public void onFinish() {
minuteTens = "0";
minuteOnes = "0";
secondTens = "0";
secondOnes = "0";
setCountdownText();
timerStarted = false;
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(1000);
}
}.start();
timerStarted = true;
} else {
if (timerPaused == false) {
pauseTimer();
} else {
resumeTimer();
}
}
}
, а также:
private void resumeTimer() {
timerPaused = false;
startTime = timeRemaining;
CountDownTimer countDownTimer = new CountDownTimer(startTime, interval) {
public void onTick(long millisUntilFinished) {
if (timerPaused == true) {
cancel();
} else {
timeRemaining = millisUntilFinished;
long remainder = millisUntilFinished;
minuteTens = df.format(millisUntilFinished/600000);
remainder = remainder - (Integer.valueOf(minuteTens) * 600000);
minuteOnes = df.format(remainder/60000);
remainder = remainder - (Integer.valueOf(minuteOnes) * 60000);
secondTens = df.format(remainder/10000);
remainder = remainder - (Integer.valueOf(secondTens) * 10000);
secondOnes = df.format(remainder/1000);
setCountdownText();
}
}
public void onFinish() {
minuteTens = "0";
minuteOnes = "0";
secondTens = "0";
secondOnes = "0";
setCountdownText();
timerStarted = false;
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(1000);
}
}.start();
}
и метод сброса:
private void resetScores() {
final TextView P1CountDownTimer = (TextView) findViewById(R.id.P1CountDownTimer);
final TextView P2CountDownTimer = (TextView) findViewById(R.id.P2CountDownTimer);
timerStarted = false;
timerPaused = false;
minuteTens = "0";
minuteOnes = "0";
secondTens = "0";
secondOnes = "0";
if (countDownTimer != null) {
countDownTimer.cancel();
countDownTimer = null;
}
setCountdownText();
P1CountDownTimer.setVisibility(View.INVISIBLE);
P2CountDownTimer.setVisibility(View.INVISIBLE);
}
Редактировать:
Это также актуально. Вот как я создаю экземпляр таймера в первую очередь, а затем снова после сброса. Принимает данные от пользователя и преобразует его в миллисекундах, чтобы пройти в countdowntimer:
private void resetTimer() {
final TextView P1CountDownTimer = (TextView) findViewById(R.id.P1CountDownTimer);
final TextView P2CountDownTimer = (TextView) findViewById(R.id.P2CountDownTimer);
startTime = ((Tens * 60) + (Ones)) * 1000;
timeRemaining = startTime;
if (startTime > 0) {
long remainder = startTime;
minuteTens = df.format(startTime/600000);
remainder = remainder - (Integer.valueOf(minuteTens) * 600000);
minuteOnes = df.format(remainder/60000);
remainder = remainder - (Integer.valueOf(minuteOnes) * 60000);
secondTens = df.format(remainder/10000);
remainder = remainder - (Integer.valueOf(secondTens) * 10000);
secondOnes = df.format(remainder/1000);
setCountdownText();
P1CountDownTimer.setVisibility(View.VISIBLE);
P2CountDownTimer.setVisibility(View.VISIBLE);
}
}