В нашем приложении у нас мало проблем после того, как мы запустили DialogFragment как диалог прогресса (это простой диалог, без прогресса).
Я хочу решить прежде всего крах. Сбой:
Fatal Exception: java.lang.IllegalStateException: Fragment already added: FullscreenSpinnerProgress{d0206ad #3 progress_animation}
at android.support.v4.app.FragmentManagerImpl.addFragment + 1916(FragmentManagerImpl.java:1916)
at android.support.v4.app.BackStackRecord.executeOps + 765(BackStackRecord.java:765)
at android.support.v4.app.FragmentManagerImpl.executeOps + 2625(FragmentManagerImpl.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether + 2411(FragmentManagerImpl.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute + 2366(FragmentManagerImpl.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions + 2273(FragmentManagerImpl.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run + 733(FragmentManagerImpl.java:733)
at android.os.Handler.handleCallback + 751(Handler.java:751)
at android.os.Handler.dispatchMessage + 95(Handler.java:95)
at android.os.Looper.loop + 185(Looper.java:185)
at android.app.ActivityThread.main + 6473(ActivityThread.java:6473)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run + 916(ZygoteInit.java:916)
at com.android.internal.os.ZygoteInit.main + 806(ZygoteInit.java:806)
Я уже переписал код, чтобы показать диалоговое окно с проверкой, присутствует ли этот фрагмент во фрагмент-менеджере, но это не помогает.
public void show(Activity activity, FragmentManager manager, String tag) {
if (activity != null && !activity.isFinishing() && manager != null &&
manager.findFragmentByTag(DEfAULT_FRAGMENT_TAG) == null) {
FragmentTransaction ft = manager.beginTransaction();
ft.add(this, tag);
ft.commitAllowingStateLoss();
}
}
Мы ожидаем, что диалог прогресса не вызовет сбой и будет работать нормально.
Существует еще одна проблема. Диалог хода выполнения воссоздается при повороте экрана, поэтому он закрывается, но работа все еще продолжается.