2010-06-25 19 views
13

Esto parece ser un problema de Android, que se puede ver en demostraciones de API en Vistas -> Barra de progreso -> Diálogos.Android: Progress Dialog spinner no gira

Básicamente, si muestra un diálogo de progreso, funciona como se esperaba la primera vez. Si lo descarta y lo muestra de nuevo (sin destruir la actividad ni nada de eso), la imagen que gira deja de girar. En la demostración de la API puede ver esto haciendo clic en "Mostrar indeterminado", presionando hacia atrás para cerrar el diálogo y haciendo clic en el botón nuevamente.

He intentado construir mi propio diálogo de progreso, sin embargo, muestra el mismo problema, ya que el problema es con la imagen de giro "ProgressBar".

Me pregunto si alguien tiene una solución para este problema.

+0

posible duplicado? http://stackoverflow.com/questions/2231438/progress-dialog-while-starting-new-activity ¿Podemos ver algún código? ¿También ha intentado volver a crear el proceso de diálogo cada vez que se muestra? algo así como procDialog = new ProcessDialog (...); – Mike

Respuesta

24

Si omite un Dialog, no debe volver a mostrar la misma instancia. Cree uno nuevo o use hide() en lugar de dismiss(). Al usar hide(), todavía tiene que dismiss() cuando ya no sea necesario.

1

Puede declarar una instancia ProgressDialog en su actividad y anular onCreateDialog(int). Luego, en lugar de hacer una llamada al showDialog(int), simplemente asigne a su instancia de ProgressDialog la llamada al onCreateDialog(int), donde llamará al dialog.show().

public class Home extends Activity { 

ProgressDialog recordingDialog; 

//where you want to call the dialog 
recordingDialog = (ProgressDialog)onCreateDialog(RECORDING_DIALOG_KEY); 


@Override 
protected Dialog onCreateDialog(int id) { 
    ProgressDialog dialog = new ProgressDialog(this); 

    switch (id) { 
    case RECORDING_DIALOG_KEY: 
     ((ProgressDialog) dialog).setIndeterminate(true); 
     dialog.setCancelable(false); 
     ((ProgressDialog) dialog) 
       .setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setMessage("Recording..."); 
     dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Stop", 
       dialogStopListener); 

     dialog.show(); 

     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 
} 
4

que estaba buscando la misma respuesta, sin embargo ninguna de las respuestas aquí trabajó para mí porque quería utilizar métodos de diálogo de la actividad como Activity.showDialog() así que no tenía que administrarlos a mí mismo y también por lo que lo harían se recreará automáticamente en una rotación.

Al igual que algunas de las otras respuestas, si se llama a dismiss() en un ProgressDialog, dejará de girar. Activity.onCreateDialog() guarda una referencia al cuadro de diálogo, por lo que una vez creado no se volverá a crear en la siguiente llamada Activity.showDialog(). Simplemente llamará al Activity.onPrepareDialog() y usará la instancia que ya tenía. Si fue descartado, no girará cuando se muestre nuevamente.

Puede obligarlo a recrearse si llama al Activity.removeDialog() con la identificación ProgressDialog en lugar de llamar al Dialog.dismiss(). Esto lo descartará y también eliminará esa referencia, de modo que cuando se llame a Activity.onShowDialog(), usará Activity.onCreateDialog() en lugar de solo Activity.onPrepareDialog() y creará una nueva (y girada) instancia.

Asegúrese de que si tiene un ProgressDialog que se puede descartar o cancelar, configure un oyente para que pueda llamar al Activity.removeDialog(). De lo contrario, solo será descartado. También puede llamarlo antes de llamar al Activity.showDialog().

Espero que ayude a alguien.

1

Puede definir la clase e implementar AsyncTask. Aquí puede definir sus procesos en segundo plano en el método doinbackground().

@Override 
    protected String doInBackground(String... params) { 
    publishProgress(new Integer(1)); 
    for(int i=0;i<=300;i++){ 
System.out.println(i); 
} 
publishProgress(new Integer(1)); 
for(int i=301;i<=600;i++){ 
System.out.println(i); 
} 
................. 
.................... 
........................... 
//your background tasks 
publishProgress(new Integer(1)); 
for(int i=601;i<=900;i++){ 
System.out.println(i); 
} 
pd.dismiss();//dismiss the progress dialog here... 
return null; 
} 

También puede mostrar su información de progreso por el onProgressUpdate() method.Check una completa fácil de seguir tutorial en http://www.androidcookers.co.cc/2011/12/want-to-run-progress-dialog-in-android.html