Вложенный DialogFragment закрывается после поворота

У меня есть вложенный (!) Фрагмент, который показывает мой PhotoNoteDialogFragment:

private void newPhotoNote() {
  mPhotoDialog = PhotoNoteDialogFragment.newInstance(this);
  mPhotoDialog.show(getFragmentManager(), PhotoNoteDialogFragment.TAG);
}

Диалоговое окно появляется, но закрывается, как только я поворачиваю устройство. Я уже провел некоторое исследование и безуспешно пробовал эти вещи:

  • установите PhotoNoteDialogFragment # setRetainInstance (true). Не работает, потому что вложенные фрагменты не могут быть сохранены.

  • Используйте этот фрагмент кода в PhotoNoteDialogFragment, чтобы предотвратить ошибку, которая приводит к нежелательному вызову отклонения из системы:

    @Override
    public void onDestroyView() {
        if (getDialog() != null)
            getDialog().setDismissMessage(null);
        super.onDestroyView();
    }
  • Попробуйте вызвать метод show () в моем вложенном фрагменте # onActivityCreated, если экземпляр PhotoNoteDialogFragment не равен нулю:
  @Override
  public void onActivityCreated(final Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (mPhotoNoteDialogFragment != null) {
      mPhotoNoteDialogFragment.show(getFragmentManager(), PhotoNoteDialogFragment.TAG);
    }
  }

Ни одна из этих попыток не могла заставить DialogFragment снова появиться после поворота экрана. Есть ли у кого-нибудь еще идея, что я могу попробовать дальше ..? У меня нет идей.

Спасибо


person muetzenflo    schedule 19.06.2013    source источник
comment
Вы использовали разную раскладку для портретного и ландшафтного режима ...   -  person Amsheer    schedule 19.06.2013
comment
Как вы добавляете корневой фрагмент? Вы уверены, что он сохранен в системе, или вы создаете его вручную?   -  person Bartosz Filipowicz    schedule 19.06.2013
comment
@Amsheer: Да, у меня разные макеты для вложенного фрагмента, а также для dialogFragment.   -  person muetzenflo    schedule 19.06.2013
comment
@BartoszFilipowicz: Да, я уверен, что фрагмент сохранен. Когда я устанавливаю точку останова в одном из его методов onCreate, экземпляр dialogFragment все еще существует после вращения.   -  person muetzenflo    schedule 19.06.2013
comment
Если это вложенный фрагмент, вы должны использовать дочерний менеджер фрагментов. Используйте getChildFragmentManager () для отображения фрагмента диалога. Также есть ли у родительского фрагмента состояние сохранения экземпляра?   -  person Bartosz Filipowicz    schedule 19.06.2013
comment
Любое решение через 2 года?   -  person MHogge    schedule 09.08.2016
comment
Не совсем. Насколько я помню, мы решили это с помощью переменной-флага (isDialogVisible), которая восстанавливается после поворота и вычисляется, если диалоговое окно должно появиться. Но даже Google Apps теряют большую часть своих диалогов после ротации ... так что кажется, что это не то, что нужно для стандартного UX ...   -  person muetzenflo    schedule 09.08.2016


Ответы (1)


Я думаю, вам не нужно переопределять onActivityCreated, ваш диалог без него будет нормальным. Я тоже пробовал. Если вы покажете диалоговое окно на onActivityCreated, ваше приложение выйдет из строя.

person Zyoo    schedule 08.09.2013