2010-06-29 33 views
17

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

18

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); 
      }}); 
    } 
} 
+4

Właśnie dokonał wymiany drop-in dla CountDownTimer, że można zrezygnować z wewnątrz onTick: https://gist.github.com/737759 –

+0

@GautierHayoun przez Ciebie sposób mogę anulować w onTick, ale onTick () nadal będą wywoływane, nie wiem dlaczego – Deqing

15

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.

+3

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

0

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(); 
      } 
     }); 
Powiązane problemy