2017-05-31 13 views
0

私はAlertDialogを開くボタンを持っています。その後、それがカウントダウンを開始し、テキストを更新し、ダイアログ内にある:Dialogでカウントダウンを行う方法と、ダイアログが再び開いたときにカウントダウンを復活させる方法

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

しかし、ユーザーがdialiogを閉じて再度開いた場合、私は渡された時間の間、カウントダウンを続けていきたいです。 13:00:00にカウントダウンを開始した場合(カウント1分)、ユーザーが13:00:15に閉じると、ユーザーが13:00:30などに再び開いた場合は、カウントを続けるので、この瞬間のカウンターはまだ30秒をカウントする必要があります...

私はいくつかの異なる方法を試しましたが、私はそれを達成していません。

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

答えて

1

ダイアログオブジェクトをローカルに作成しないでください。アクティビティにグローバル変数を作成します。今すぐあなたのダイアログの作成と解雇は当社または方法showTimerDialog

オーバーライド

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; 

は今の方法でオブジェクトを作成してプッシュし、これらのシナリオに

ダイアログを処理するためのダイアログの AlertDialog.BUTTON_POSITIVEAlertDialog.BUTTON_NEGATIVEは.callクラスのメソッドをすることができ
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 

今、このブール変数に基づいて、あなたはタイマー

を実行する方法を変更することができますが
+0

ありがとうございます、ありがとう – Shudy

関連する問題