【发布时间】:2015-08-08 23:31:12
【问题描述】:
在我的应用中,我有一个 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?有没有人遇到过类似的问题?任何帮助将不胜感激。
【问题讨论】:
-
我有一个问题?您如何在 Activity 中获得 getChildFragmentManager() 的实例。通常 childFragmentManager 与片段相关联。如果我错了,请纠正我。
-
我正在从片段中调用 getChildFragmentManager。如问题所述,我从片段中调用 DialogFragment
-
如此处所述,stackoverflow.com/a/22386954/3035416,尝试使用 getSupportManager()。但我仍然很困惑为什么它没有再次出现。锻炼后会回复您。
-
谢谢。如果我使用 ChildFragmentManager,DialogFragment 通过旋转保留,但我无法使用 ChildFragmentManager 的 findFragmentByTag() 方法再次设置侦听器。
标签: android android-dialogfragment fragmentmanager