使用ChildFragmentManager找不到DialogFragment

时间:2015-05-27 04:07:21

标签: android android-dialogfragment fragmentmanager

在我的应用程序中,我有一个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始终为null。我尝试使用getFragmentManager()getActivity().getSupportFragmentManager()来识别片段,但对话框在旋转后从屏幕上消失。为什么ChildFragmentManager无法识别DialogFragment?有没有人遇到类似的问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣,我解决它的方法是使用ChildFragmentManager并在onCreateView()而不是onCreate()中使用它。奇怪...