В моем приложении есть 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? Кто-нибудь сталкивался с подобной проблемой? Любая помощь будет принята с благодарностью.