2017-02-09 4 views
2

J'ai recherché du code pour le compte à rebours sur AlertDialog mais quand j'ai essayé le code, il ne montre pas le temps qu'il est cliqué mais quand il est cliqué de nouveau il est coché mais je voulais qu'il soit dans la boîte de dialogue quand il compte à rebours. Eh bien, voici mon code.Compte à rebours dans 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

Au lieu de mettre un message à Builder dynamiquement, un message mis à AlertDialog –

Répondre

3

Vous pouvez créer AlertDialog comme celui-ci

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

Je vais essayer ce monsieur de code! :) –

+0

Je vais essayer ce code monsieur! :) –

+0

2 boîtes de dialogue d'alerte montrent monsieur le premier doit être OK'ed afin que le minuteur réel sera montré –

0

Le constructeur et la boîte de dialogue sont deux entités distinctes. Votre minuterie configure le message pour le constructeur après la boîte de dialogue a déjà été créée.

Vous devez garder une référence à ce qui est retourné par:

builder.show(); 

Et puis appelez setMessage() sur ce point. De plus, n'oubliez pas d'annuler la minuterie lorsque votre boîte de dialogue est fermée.

0

S'il vous plaît utiliser le code ci dessous pour décompter le temps dans votre boîte de dialogue d'alerte son travail

new CountDownTimer(30000, 1000) { 

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

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