2017-05-31 1 views
0

J'ai un bouton, qui ouvre un AlertDialog. Ensuite, il commence un compte à rebours, et rafraîchir le texte se trouve dans la boîte de dialogue:Comment faire un compte à rebours dans Dialog, et récupérer le compte à rebours si la boîte de dialogue est à nouveau ouverte

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(); 
    } 

Mais, si l'utilisateur fermer le dialiog et l'ouvre à nouveau, je veux continuer pendant le compte à rebours du temps écoulé. Je veux dire, si j'ai commencé le compte à rebours à 13:00:00, (compte 1 min), et l'utilisateur ferme à 13:00:15, si l'utilisateur ouvre à nouveau, par exemple à: 13:00:30, je veux continuez le compte, donc compteur à ce moment-ci encore faut compter 30 secondes de plus ...

J'ai essayé plusieurs façons, mais je n'y arrive pas.

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(); 
    } 

Répondre

1

Ne créez pas d'objet de dialogue localement. Créez une variable globale dans Activity. Maintenant, votre création de dialogue et de révocation peuvent être notre ou la méthode showTimerDialog

Remplacer les méthodes de classe de dialogue de AlertDialog.BUTTON_POSITIVE et AlertDialog.BUTTON_NEGATIVE .call pour gérer ces scénarios

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; 

maintenant dans la méthode create objet et pousser 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 

maintenant basé sur cette variable bool, vous pouvez modifier la méthode pour exécuter la minuterie

private void countDown(int cooldown) { 
    if(isTimerstarted){ 
    // Your business logic 
    }else{ 
    //Handle for else case 
    } 
} 
+0

Je vais jeter un coup d'oeil, merci – Shudy