ProgressDialog, созданный из onCreateDialog, останавливает анимацию при втором запуске
Я создаю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, но, подумав, я не думаю, что это очень хорошее решение моей проблемы)