Rozszerzam klasę CountDownTimer w celu uzyskania niestandardowych funkcji .In onTick() w przypadku spełnienia niektórych warunków Wywołuję cancel(), spodziewając się, że będzie to koniec, jednak Funkcja zwrotna onTick pobiera połączenie do momentu osiągnięcia odliczania. Jak temu zapobiec?jak zatrzymać/anulować android CountDownTimer
Odpowiedz
Metoda CountDownTimer.cancel() wydaje się nie działać. Oto kolejny wątek bez rozwiązania Timer does not stop in android.
Polecam zamiast tego używać Timera. Jest znacznie bardziej elastyczny i można go anulować w dowolnym momencie. Może to być coś takiego:
public class MainActivity extends Activity {
TextView mTextField;
long elapsed;
final static long INTERVAL=1000;
final static long TIMEOUT=5000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextField=(TextView)findViewById(R.id.textview1);
TimerTask task=new TimerTask(){
@Override
public void run() {
elapsed+=INTERVAL;
if(elapsed>=TIMEOUT){
this.cancel();
displayText("finished");
return;
}
//if(some other conditions)
// this.cancel();
displayText("seconds elapsed: " + elapsed/1000);
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, INTERVAL, INTERVAL);
}
private void displayText(final String text){
this.runOnUiThread(new Runnable(){
@Override
public void run() {
mTextField.setText(text);
}});
}
}
CountDownTimer również działa dobrze dla mnie, ale myślę, że to działa tylko wtedy, gdy nazywają go poza implementacja CountDownTimer (czyli nie nazywaj go w onTick).
Dzwonienie do niego również nie zadziałało.
Tak, wywoływanie go w OnTick nie działa. Z pewnością zadzwoniłem do Finish i próbowałem anulować countdowntimer wewnątrz na Finish i zadziałało – Basher51
Próbowałem tego fragmentu kodu, ponieważ większość odpowiedzi mówi, że nie można anulować licznika czasu w jego implementacji, dlatego próbowałem użyć programu obsługi wewnątrz programuFinish. Stary post, ale jeśli komuś się to przyda, to pomocne.
new Handler().post(new Runnable() {
@Override
public void run() {
timerTextView.setText("00:" + String.format("%02d", counter));
cancel();
}
});
- 1. Android CountDownTimer
- 2. Android: CountDownTimer przeskakuje ostatni naTick()!
- 3. Jak zaimplementować klasę CountDownTimer w Xamarin C# Android?
- 4. android CountDownTimer - ostatnio nie nazwiemy - jakie czyste rozwiązanie użyć?
- 5. CountDownTimer w Androidzie - jak go ponownie uruchomić
- 6. Countdowntimer w minutach i sekundach
- 7. timerem nie zatrzymuje się w android
- 8. Regularne aktualizowanie Android TextView, aby pokazać odliczanie
- 9. Android: Jak zatrzymać i wznowić licznik odliczania?
- 10. Jak działają Android: shrinkColumns i android: stretchColumns?
- 11. Android: jak programowo znaleźć nazwę wersji Android?
- 12. android: Jak zrobić klapkę z kart jak rynek Android?
- 13. jak zmusić język Android
- 14. Android: jak wygenerować częstotliwość?
- 15. Android: jak załadować KML
- 16. android - jak wypełnić Edittext?
- 17. Android - jak zdobyć Android.R.anim.slide_in_right
- 18. Android: jak przeskakiwać obrazy?
- 19. Android -Jak animować viewPager
- 20. Zegar odliczający Android Circular Progress Bar nie pasuje do timera
- 21. Android: notifyDataSetChanged(); nie działa
- 22. jak poprawnie używać postDelayed() w Androidzie studio?
- 23. Android: Jak korzystać z AlarmManager
- 24. Android: Jak zmienić rozmiar CheckBox?
- 25. Android: jak rozwiązać Bitmap java.lang.OutOfMemoryError?
- 26. Jak zdobyć keyCode w android
- 27. Android: jak przechowywać pliki cookie?
- 28. Android jak Toast in Swing
- 29. Android, jak stworzyć opcja menu
- 30. Jak naprawić android.os.DeadObjectException android X
Właśnie dokonał wymiany drop-in dla CountDownTimer, że można zrezygnować z wewnątrz onTick: https://gist.github.com/737759 –
@GautierHayoun przez Ciebie sposób mogę anulować w onTick, ale onTick () nadal będą wywoływane, nie wiem dlaczego – Deqing