2016-05-05 12 views
0

Ich habe einen Countdown-Timer für 5 Minuten erstellt, aber wenn Benutzer die Aufgabe in 2 Minuten abschließen, möchte ich den Timer stoppen.Android CountDownTimer wird nicht abbrechen

Ich verwende eine boolesche Flagge, um zu überprüfen, ob der Wetterbenutzer die Aufgabe erledigt oder nicht.

Wenn Benutzer abgeschlossen die Aufgabe, vor Gesamtzeit dann nenne ich cancel()

My-Code

public void settimer(final TextView time, long milliseconds) { 

     new CountDownTimer(milliseconds, 1000) { 

      public void onTick(long millisUntilFinished) { 
       time.setText(String.format("%d:%d", 
         TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished), 
         TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
           TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); 
       AppController.RunningTime = millisUntilFinished; 
       if (AppController.Stoptimer) 
        this.cancel(); 
      } 

      public void onFinish() { 
       AppController.TimeFinished = true; 
      } 

     }.start(); 
    } 

cancel() wird Countdown timmer Methoden mentioned here.

enter image description here

cancel() wird aufgerufen, aber der Countdown-Timer wird nicht gestoppt.

Jede Hilfe wird geschätzt.

+0

Was ist 'AppController'? – Vucko

+0

@Vucko seine Anwendungsklasse. –

+0

Zum ersten Mal sehe ich es. Es soll als eine Art globale Variable verwendet werden? Ich würde empfehlen [EventBus] (https://github.com/greenrobot/EventBus) für diese Art von Sache zu verwenden, es ist perfekt. Wenn ein Benutzer entscheidet, den Zeitgeber abzubrechen, einfach das entsprechende Ereignis posten und onReceive dieses Ereignisses den Zeitgeber abbrechen. – Vucko

Antwort

1
int adsInterval = 3000; 
CountDownTimer mTimer = mTimer = new CountDownTimer(adsInterval, 1000) { 
    @Override 
    public void onFinish() { 
     Log.d("Seconds", adsInterval + " second"); 
     // YOUR TASK 
    } 

    @Override 
    public void onTick(long l) { 
    } 

}; 
mTimer.start(); 


Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { 

    } 
}, 3000); 

Um Timer START

mTimer.start(); 

Um STOP-Timer

mTimer.cancel(); 
+0

Diese Methode zum Aufruf von Timer funktioniert. –

+0

Bitte machen Sie die richtige Antwort. –