ProgressDialog criado a partir de onCreateDialog para de animar na segunda execução
Eu crio umProgressDialog
noonCreateDialog()
igual a:
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;
}
}
O Android, em sua sabedoria (ou falta grave), decide armazenar em cache todas as caixas de diálogo criadas por meio de onCreateDialog (). Por esse motivo, qualquer chamada subsequente parashowDialog(DIALOG_PROGRESS_ID)
resulta na mesma instância ProgressDialog sendo usada, mas a animação parou de funcionar.
Eu tentei redefinir indeterminado emonPrepareDialog()
, mas isso não faz nada. Da mesma forma, não existe um método óbvio para chamar a instância de diálogo que redefinirá a animação.
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);
}
EDIT: Mas talvez haja uma maneira de obter o ProgressBar em si e começar a animar? então tentei o seguinte depois de fazer esta pergunta:
@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);
}
Mas não funcionouou!
Então, alguém sabe se existe uma maneira de reiniciar a animação em um ProgressDialog?Caso contrário, existe uma maneira de eu forçar cada chamada showDialog () a chamar onCreateDialog ()? (esta segunda pergunta foi respondida por @TuomasR, mas depois de ponderá-la, não acho que seja uma solução muito boa para o meu problema)