2017-02-09 62 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();