我有一个关于 DialogFragment 的问题。我正在尝试制作一个对话框,在设备旋转后保持其状态。这个对话框有一堆引用,比如适配器和其他较重的对象,我需要在旋转时保持这些引用,如果可能的话,不必使每个引用都可以 Parcelable 或 Serializable 以便我使用 onSaveInstanceState 来保存和恢复它们重新创建原始 Activity 。
我注意到 DialogFragment 上有一个名为 setRetainInstance(boolean) 的方法,它允许您在重新创建 Activity 时保留对话框 fragment 实例。但是,当我现在旋转设备时,对话框不再显示。我知道我可以从 Activity 的 FragmentManager 中获取它,但我找不到使它再次可见的方法。对此有何建议?
谢谢, 米海
最佳答案
您需要做的事情很少:
使用实例工厂方法启动 DialogFragment 实例,如下所示:
public static MyDialogFragment newInstance(MyModel model) { MyDialogFragment myDialogFragment = new MyDialogFragment(); Bundle bundle = new Bundle(); bundle.putSerializable("MODEL", model); myDialogFragment .setArguments(bundle); return myDialogFragment; }
通过将 setRetainInstance(true) 放在 onCreate 中,您在 fragment 中声明的所有引用都将在重新创建原始 Activity 后保留
@Override public void onCreate(Bundle icicle) { this.setCancelable(true); setRetainInstance(true); super.onCreate(icicle); }
通过这样做避免在旋转时消失
@Override public void onDestroyView() { if (getDialog() != null && getRetainInstance()) getDialog().setDismissMessage(null); super.onDestroyView();
使用
获取对象(MyModel) getArguments().getSerializable("MODEL")
关于android - 设备旋转后不显示带有setRetainInstanceState(true)的DialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934951/