Не удается найти DialogFragment с помощью ChildFragmentManager

В моем приложении есть AppCompatActivity с фрагментом поддержки. Из этого фрагмента я показываю DialogFragment следующим образом

final MyDialogFragment completeDialogFragment = MyDialogFragment.newInstance(titleString,
                messageString, DialogType.Ok);

completeDialogFragment.setDialogCallBack(new MyDialogFragment.DialogCallBacks() {
        @Override
        public void onPositive() {
             // some code to execute when Ok is pressed
            completeDialogFragment.dismiss();
        }

        @Override
        public void onNegative() {
            // not relevant
        }
    });

completeDialogFragment.setCancelable(false);
FragmentManager mgr = getChildFragmentManager();
completeDialogFragment.show(mgr, MY_TAG);

Как видите, я подключаю интерфейс прослушивателя для прослушивания положительных/отрицательных нажатий кнопок из фрагмента диалога. Этот прослушиватель работает, как и ожидалось, но когда устройство поворачивается, это не так. Поэтому я хотел сохранить или сбросить этот прослушиватель всякий раз, когда устройство вращается. Как многие люди предлагали в stackoverflow, я попытался сделать это следующим образом в своем фрагменте

@Override
public void onCreate(Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        FragmentManager mgr = getChildFragmentManager();
        final MyDialogFragment completeDialogFragment = 
                      (MyDialogFragment) mgr.findFragmentByTag(MY_TAG);
        if (completeDialogFragment != null) {
            completeDialogFragment
             .setDialogCallBack(new MyDialogFragment.DialogCallBacks() {
                    @Override
                    public void onPositive() {
                        // some code to execute when Ok is pressed
                        completeDialogFragment.dismiss();
                    }

                    @Override
                    public void onNegative() {
                        // not relevant
                    }
                });
        }

    }
}

В приведенном выше сегменте кода я пытаюсь найти фрагмент диалога по его тегу и сбросить прослушиватель, но переменная completeDialogFragment всегда равна нулю. Вместо этого я попытался использовать getFragmentManager() и getActivity().getSupportFragmentManager(), и он идентифицирует фрагмент, но диалоговое окно исчезает с экрана после поворота. Почему ChildFragmentManager не может идентифицировать DialogFragment? Кто-нибудь сталкивался с подобной проблемой? Любая помощь будет принята с благодарностью.


person Much Overflow    schedule 27.05.2015    source источник
comment
У меня есть один вопрос?. Как вы получили экземпляр getChildFragmentManager() в Activity. Обычно childFragmentManagers связаны с фрагментами. Пожалуйста, поправьте меня, если я ошибаюсь.   -  person Vishnu Prabhu    schedule 27.05.2015
comment
Я вызываю getChildFragmentManager из фрагмента. Как указано в вопросе, я вызываю DialogFragment из фрагмента   -  person Much Overflow    schedule 27.05.2015
comment
Как указано здесь, stackoverflow.com/a/22386954/3035416 попробуйте использовать getSupportManager(). Но я все еще смущен, почему он не появляется снова. Вернемся к вам после тренировки.   -  person Vishnu Prabhu    schedule 27.05.2015
comment
Спасибо. Если я использую ChildFragmentManager, DialogFragment сохраняется через повороты, но я не могу снова установить прослушиватель с помощью метода findFragmentByTag() ChildFragmentManager.   -  person Much Overflow    schedule 27.05.2015


Ответы (1)


Если кому-то интересно, я решил использовать ChildFragmentManager и использовать его в onCreateView() вместо onCreate(). Странный...

person Much Overflow    schedule 28.05.2015