2017-05-31 2 views
0

Ich habe eine Schaltfläche, die einen AlertDialog öffnet. Dann beginnt es einen Countdown, und aktualisieren Sie den Text im Dialog:Wie Countdown in Dialog und Countdown wiederherstellen, wenn Dialog erneut geöffnet wird

private void countDown(int cooldown) { 
     countDownTimer = new CountDownTimer(cooldown, COOLDOWN_TIME_STEP_MILLIS) { //sec , steps 

      public void onTick(long millisUntilFinished) { 
       isTimerActive = false; 
       if (mFingerprintText != null) { 
        updateDialogText("Awsome text count: " + millisUntilFinished/COOLDOWN_TIME_STEP_MILLIS + " segs", false); 
       } 
      } 

      public void onFinish() { 
       isTimerActive = false; 
       if (mFingerprintText != null) { 
        updateDialogText("Awsome text count finished", false); 
       } 
      } 
     }.start(); 
    } 

Aber, wenn Benutzer die dialiog schließen und öffnet sie wieder, ich will übergeben den Countdown während der Zeit fortzusetzen. Ich meine, wenn ich den Countdown um 13:00:00 begann, (zählt 1 min) und Benutzer um 13:00:15 schließen, wenn der Benutzer erneut öffnet, zum Beispiel um: 13:00:30, möchte ich setze die Zählung fort, so dass Zähler in diesem Moment immer noch 30 Sekunden zählen müssen ...

Ich habe verschiedene Wege ausprobiert, aber ich erreiche es nicht.

private void showTimerDialog(Context context) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 

     View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_request_android_timer, null); 
     builder.setView(dialogView); 

     if (!isTimerActive) { 
      mTimerText = (TextView) dialogView.findViewById(R.id.dialog_timer_text); 
     } 

     builder.setOnDismissListener(new DialogInterface.OnDismissListener() { 
      @Override 
      public void onDismiss(DialogInterface dialog) { 
       if (mActive) { 
        deactivate(); 
       } 
      } 
     }); 

     builder.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog) { 
       mDialog.dismiss(); 
      } 
     }); 

     builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       mDialog.dismiss(); 
      } 
     }); 

     mDialog = builder.create(); 
     mDialog.setCanceledOnTouchOutside(false); 
     mDialog.show(); 
    } 

Antwort

1

Objekt von Dialog nicht lokal erstellen. Erstellen Sie eine globale Variable in Aktivität. Jetzt ist Ihre Dialog-Erstellung und Entlassung können unsere oder die Methode sein showTimerDialog

überschreiben die von Dialog AlertDialog.BUTTON_POSITIVE und AlertDialog.BUTTON_NEGATIVE .Call Klasse Methoden, um diese Szenarien zu behandeln

public class StartRaceFrag extends Activity{ 
//Keep a global instance 
private AlertDialog mDialog; 
//Create a boolean to check if timer already started or not 
private boolean isTimerstarted; 

nun in dem Verfahren Objekt erstellen und schieben Dialog

private void showTimerDialog(Context context) { 
     //Start timer based on this bool variable 
     if(!isTimerstarted){ 
     isTimerstarted=true; 
     } 
     final AlertDialog.Builder dialog = new AlertDialog.Builder(context); 
     View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_request_android_timer, null); 

     builder.setView(dialogView); 
     mDialog=builder.create(); 
     //Other dialog related statements 
     //Override the Dialog Positive and Negative button and call other class methods to handle 

Basierend auf dieser bool-Variablen können Sie die Methode ändern, um den Timer

zu starten
+0

Ich werde einen Blick, danke – Shudy