2010-11-17 19 views
10

Quiero hacer que aparezca un diálogo de progreso falso durante 2 o 3 segundos. En realidad, no hará nada más que decir la detección. Tengo el código:Agregue un retraso al Diálogo de progreso

ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...", 
      true); 
    dialog.show(); 

    dialog.dismiss(); 

Pero lo que puedo poner en el medio del show, y el despido de tener el cuadro de diálogo aparecerá durante unos segundos? ¡Gracias!

Respuesta

48

La forma correcta - no bloquea su principal hilo, por lo que se mantiene la interfaz de usuario responde:

dialog.show(); 

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
     dialog.dismiss(); 
    } 
}, 3000); // 3000 milliseconds delay 
+0

Gran respuesta, simplemente se echa en falta una llave de cierre adicional antes de la última línea: }} , 3000); // 3000 milisegundos – DEzra

+0

discúlpeme! cómo podemos actualizar nuestro mensaje en el cuadro de diálogo de progreso mientras esperamos. por ejemplo: 5 seg ... 4 seg ... 3 seg ... 2 seg ... 1 seg ... ¡BOOOOM! y descartar –

0

Nada viene entre el despido y mostrar .. el tiempo depende de usted. Por ejemplo diálogo mostrará antes de que el acceso al servidor y se despedirá conseguir entiende el resultado

dialog.show(); 
ServerCall(); 
dialog.close(); 

Si necesita retraso vacío significa entonces utilizar la llamada countDownTimer entre eso ..

2
 progress.setProgress(100); 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      public void run() { 
       pdialog.dismiss(); 
      }}, 3000); 
1

también puede utilizar CountDownTimer de Android, que es mucho más eficiente que cualquier otra solución publicada y yo t también admite incendios en intervalos regulares mediante su método onTick().

Tener un vistazo a este ejemplo,

new CountDownTimer(3000, 1000) { 

    public void onTick(long millisUntilFinished) { 
      // You don't need anything here 
    } 

    public void onFinish() { 
     dialog.dismiss(); 
    } 
    }.start(); 
+0

Esto es exactamente lo que necesito, la función de Hanlder no puede usarse en Leanback: D –

1

Usted puede hacer algo como esto:

new AsyncTask<Void, Void, Void> 
{ 
    ProgressDialog dialog = new ProgressDialog(MainActivity.this); 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     dialog.setTitle("Please wait"); 
     dialog.setMessage("Preparing resources..."); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 


    @Override 
    protected Void doInBackground(Void... params) { 
     try{ 
      Thread.sleep(3000); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) 
    { 
     super.onPostExecute(aVoid); 
     if (dialog!=null && dialog.isShowing()) 
     { 
      dialog.dismiss(); 
     } 
    } 
}.execute(); 
Cuestiones relacionadas