2017-02-09 68 views
2

我研究了一些AlertDialog倒計時的代碼,但是當我嘗試代碼時,它不倒計數,只顯示了它被點擊的時間,但當它再次被點擊時,它被打勾,但我希望它成爲在對話框中進行倒計時。那麼這裏是我的代碼。alertDialog中的倒計時Android Studio

fabTimer.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final AlertDialog.Builder builder = new AlertDialog.Builder(downPaymentActivity.this); 
      builder.setTitle("Time left"); 
      try { 
       SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
       TimeZone tz = TimeZone.getTimeZone("Asia/Manila"); 
       sdf1.setTimeZone(tz); 
       String currentDateandTime = sdf1.format(new Date()); 

       String givenDateString = tvDueDate.getText().toString(); 

       Date date1 = sdf1.parse(currentDateandTime); 
       Date date2 = sdf1.parse(givenDateString); 

       long restDatesinMillis = date2.getTime() - date1.getTime(); 
       final String hms = String.format("%02d:%02d:%02d", 
         TimeUnit.MILLISECONDS.toHours(restDatesinMillis), 
         TimeUnit.MILLISECONDS.toMinutes(restDatesinMillis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(restDatesinMillis)), 
         TimeUnit.MILLISECONDS.toSeconds(restDatesinMillis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(restDatesinMillis))); 
       builder.setMessage(hms); 
       new CountDownTimer(10000, 1000) { 
        @Override 
        public void onTick(long l) { 
         builder.setMessage(hms + (l/1000)); 
        } 

        @Override 
        public void onFinish() { 

        } 
       }.start(); 
       builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         dialogInterface.cancel(); 
        } 
       }); 
       builder.show(); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
+0

而不是設置消息來動態生成器,設置消息AlertDialog –

回答

3

你可以這樣

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
builder.setTitle("Time left"); 
builder.setMessage("start time"); 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialogInterface, int i) { 
     dialogInterface.cancel(); 
    } 
}); 

final AlertDialog alert = builder.create(); 
alert.show(); 
new CountDownTimer(10000, 1000) { 
    @Override 
    public void onTick(long l) { 
     alert.setMessage("left: "+l); 
    } 
    @Override 
    public void onFinish() { 
     alert.setMessage("end"); 
    } 
}.start(); 

enter image description here

+0

我會試試這個代碼先生! :) –

+0

我會試試這個代碼先生! :) –

+0

2警報對話框顯示先生第一個需要被確定,所以實際的計時器將顯示 –

0

的建設者和對話創造AlertDialog是兩個獨立的實體。您的計時器正在爲之後的構建器設置消息,該對話框已經生成。

你應該保持到什麼是通過返回的引用:

builder.show(); 

然後調用該setMessage()

此外,不要忘記取消計時器,當你的對話被解散。

0

請使用倒計時下面的代碼在你的警告對話框及其工作

new CountDownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 
     mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
    } 

    public void onFinish() { 
     mTextField.setText("done!"); 
    } 
    }.start();