creo un ProgressDialog
en onCreateDialog()
así:ProgressDialog creados a partir de onCreateDialog deja de animación en la segunda carrera
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_PROGRESS_ID)
{
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage(getResources().getString(R.string.MyLabel));
dialog.setCancelable(false);
dialog.setIndeterminate(true);
return dialog;
}
}
Android, en su sabiduría (o grave falta de ella) decide almacenar en caché cada diálogo creado a través onCreateDialog() . Por eso, cualquier llamada posterior al showDialog(DIALOG_PROGRESS_ID)
da como resultado que se use la misma instancia de ProgressDialog, pero la animación ha dejado de funcionar.
He intentado volver a establecer indeterminado en onPrepareDialog()
, pero eso no hace nada. Tampoco hay un método obvio para invocar la instancia de diálogo que reiniciará la animación.
protected void onPrepareDialog(int id, Dialog dialog)
{
//This doesn't do anything
if (id == DIALOG_PROGRESS_ID)
((ProgressDialog)dialog).setIndeterminate(true);
super.onPrepareDialog(id, dialog);
}
EDITAR: ¿Pero tal vez hay una forma de obtener ProgressBar y comenzar a animar? así que he intentado lo siguiente después hice esta pregunta:
@Override
protected void onPrepareDialog(int id, Dialog dialog)
{
if (id == DIALOG_PROGRESS_ID)
{
ProgressBar p = (ProgressBar) dialog.findViewById(android.R.id.progress);
if (p.getAnimation() != null)
p.startAnimation(p.getAnimation());
}
super.onPrepareDialog(id, dialog);
}
Pero no funcionó bien !
Entonces, ¿alguien sabe si hay una forma de reiniciar la animación en un ProgressDialog?
Si no, ¿hay alguna manera de forzar cada llamada a showDialog() para llamar aCreateDialog()?
(esta segunda pregunta fue respondida por @TuomasR, pero después de considerarla no creo que esta sea una solución muy buena para mi problema)
No hay necesidad de llamar al método 'dismissDialog' - puede simplemente llamar a' removeDialog', ya que 'Si el diálogo se muestra, lo descartará como parte de la limpieza' (de JavaDoc) – Idolon