Я создаю ProgressDialog
в onCreateDialog()
примерно так:
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 в своей мудрости (или серьезном отсутствии) решает кэшировать каждое диалоговое окно, созданное с помощью onCreateDialog (). Из-за этого любой последующий вызов showDialog(DIALOG_PROGRESS_ID)
приводит к использованию того же экземпляра ProgressDialog, но анимация перестала работать.
Я пытался восстановить неопределенность в onPrepareDialog()
, но это ничего не дает. Также нет очевидного метода вызова экземпляра диалога, который будет сбрасывать анимацию.
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);
}
РЕДАКТИРОВАТЬ: Но, возможно, есть способ получить сам ProgressBar и начать его анимацию? поэтому я попробовал следующее после того, как задал этот вопрос:
@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);
}
Но это не сработало либо !
Итак, кто-нибудь знает, есть ли способ перезапустить анимацию на ProgressDialog? Если нет, могу ли я заставить каждый вызов showDialog () вызывать onCreateDialog ()? (на этот второй вопрос ответил @TuomasR, но, подумав, я не думаю, что это очень хорошее решение моей проблемы)