Проблема таймера обратного отсчета - PullRequest
0 голосов
/ 15 мая 2011

Я использую этот класс Android для реализации обратного отсчета: http://developer.android.com/reference/android/os/CountDownTimer.html

Я создал собственный класс Мой счет:

public class MyCount extends CountDownTimer{

public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onFinish() {
tv_test.setText("");
}

@Override
public void onTick(long millisUntilFinished) {
tv_test.setText("d"+ (millisUntilFinished/(3600000*24))+ " h: "+  (millisUntilFinished/3600000)%24  +" m: " +  (millisUntilFinished/60000) % 60 + " sec: "+   (millisUntilFinished/1000) % 60);

}

}

в onStart () моей деятельности у меня есть этот код:

MyCount counter = new MyCount(time, 1000);
        counter.start();

Проблема теперь: если я перехожу к следующему занятию и возвращаюсь, отсчет времени запускается снова и запускаются два отсчета.

Я не могу поместить его в onCreate (), потому что переменная времени может быть изменена пользователем. Он меняет это на другой вид деятельности

1 Ответ

1 голос
/ 15 мая 2011

попробуйте добавить логический пример:

booelan counterIsLaunched = false;
boolean timeChanged = false;

и в вашей реализации счетчика добавьте:

@Override
public void onFinish() { tv_test.setText("");
counterIsLaunched = false;
if(timeChanged) start();
}
@Override
public void onTick(long millisUntilFinished) {
tv_test.setText("d"+ (millisUntilFinished/(3600000*24))+ " h: "+  (millisUntilFinished/3600000)%24  +" m: " +  (millisUntilFinished/60000) % 60 + " sec: "+   (millisUntilFinished/1000) % 60);
counterIsLaunched = true;
if(timeChanged) start();
}

и в вашем onStart () попробуйте проверить переменную

if(counter.getCounterIsLaunched() == false ) {
counter.start();
}

и когда вы изменили таймер, сделайте что-то вроде этого:

counter.getTimeChanged() = true;

надеюсь, это поможет человеку:)

...