找不到带有 ChildFragmentManager 的 DialogFragment
Cannot find DialogFragment with 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);
如您所见,我附加了一个侦听器界面来侦听对话框片段中的肯定/否定按钮点击。此侦听器按预期工作,但当设备旋转时,它不会。所以我想在设备旋转时保留或重置此侦听器。正如许多人在 Whosebug 上建议的那样,我尝试在我的片段
中按以下方式进行
@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?有没有人遇到过类似的问题?任何帮助将不胜感激。
如果有人感兴趣,我解决的方法是使用ChildFragmentManager
并在onCreateView()
中使用它而不是onCreate()
。奇怪...
在我的应用程序中,我有一个 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);
如您所见,我附加了一个侦听器界面来侦听对话框片段中的肯定/否定按钮点击。此侦听器按预期工作,但当设备旋转时,它不会。所以我想在设备旋转时保留或重置此侦听器。正如许多人在 Whosebug 上建议的那样,我尝试在我的片段
中按以下方式进行@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?有没有人遇到过类似的问题?任何帮助将不胜感激。
如果有人感兴趣,我解决的方法是使用ChildFragmentManager
并在onCreateView()
中使用它而不是onCreate()
。奇怪...