安卓碎片旋转问题

4

编辑:

我有一个 DialogFragment,在更改设备方向后,父 Activity 中的引用值为NULL。我该如何解决这个问题?

片段创建:

MyFragment myFragment = MyFragment.newInstance(title);
myFragment.show(getFragmentManager(), tag);

屏幕方向改变后:
MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag(tag);
myFragment.dismiss();  //NULL pointer exception here

1
我们需要看到更多的代码并获取更多的信息,才有任何帮助您的机会。你如何创建片段(fragment)?你是否做了任何处理来处理方向更新? - Warpzit
你能否在屏幕方向改变之前的标签中找到片段? - Warpzit
我依赖默认的系统行为来处理方向变化。 - meeeee
您还可以确保用于创建 Fragment 的标记与用于搜索的标记相同吗?Dialog Fragment 在屏幕方向更改后是否消失? - Marco RS
@Marco 是的,我正在使用相同的标签,改变后片段是可见的。如果我不改变方向,findFragmentByTag方法可以正常工作。当发生方向更改并且系统重新创建片段时,似乎它没有我使用的标签。 - meeeee
你想在屏幕旋转后做些什么吗?如果不需要,只需在清单文件中添加android:configChange="orientation" ,在你的碎片中重写onConfigurationChanged() 方法并删除super.onConfigurationChanged(),然后什么都不做。同时,在实例化碎片时也要设置.setRetainInstance(true)。 - Nikola Despotoski
1个回答

3

myFragment.setRetainInstance(true); 可以解决问题。


编辑:

并且在你的DialogFragment中重写 onDestroyView 方法:

@Override
public void onDestroyView() {
  if (getDialog() != null && getRetainInstance())
    getDialog().setOnDismissListener(null);
  super.onDestroyView();
}

以下内容是对此问题的解决结果:http://code.google.com/p/android/issues/detail?id=17423


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接