0

Dies ist, wie ich meine Anwendung am CountdownTimer inCountdown-Timer nicht einmal nach stoppt abbrechen

ich es nenne, von Fragment

CounterClass counterClass=CounterClass.getInstance(180000,1000); 
counterClass.setTextView(tvTimer); 
counterClass.setContext(getActivity().getApplicationContext()); 
counterClass.start(); 

und wenn der Benutzer drückt Schaltfläche Aktivität zurück, ich benutze diese Code

CounterClass.getInstance().cancel(); 
CounterClass.getInstance().onFinish(); 

aber das ist nicht zu helfen, habe ich eine Log Nachricht in onTick hinzugefügt, ich kann die Zecke Konti sehen nuous funktioniert auch nach cancel heißt.

Dies ist meine Implementierung von CountDownTimer

public class CounterClass extends CountDownTimer { 


    public static CounterClass getInstance(long millisInFuture, long countDownInterval){ 
     instance = new CounterClass(millisInFuture, countDownInterval); 
     return instance; 
    } 



@Override 
    public void onTick(long millisUntilFinished) { 
     long millis= millisUntilFinished; 
     elapsedTime = millisUntilFinished; 

     String hms= String.format("%02d:%02d", 
     TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished), 
     TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); 
     tvTimer.setText(hms); 

} 

} 

Bitte leite mich, wie und Timer zurückgesetzt zu stoppen. Ich habe auch versucht boolean Ansatz, wo ich Boolean in onTick gesetzt und überprüft, aber das hat auch nicht funktioniert.

Antwort

1

Sie erstellen bei jedem Aufruf von getInstance() eine neue Instanz Ihrer Zählerklasse. Für dieses Singleton-Muster möchten Sie jedes Mal dieselbe Instanz zurückgeben. In diesem Fall wird eine neue Instanz abgebrochen, während die alte Instanz weiterhin ausgeführt wird. Sie werden einen Mod, um Ihren Code so etwas wie dies machen müssen:

public class CounterClass extends CountDownTimer { 

    private static CounterClass sInstance; 

    public static CounterClass getInstance(long millisInFuture, long countDownInterval){ 
     if (sInstance == null) { 
      sInstance = new CounterClass(millisInFuture, countDownInterval); 
     } 
     return sInstance; 
    } 
    ... 

Sie wahrscheinlich auch müssen onFinish() nicht selbst anrufen und das Framework das für Sie tun lassen sollte.