我有一个奇怪的问题。我在具有主机 FragmentActivity 的应用程序中使用 Fragments,在该应用程序中我实现了class FragmentPagerAdapater
构造 Fragment 并将它们放入我的活动选项卡的内部。
在应用程序中,我需要将一个对象从我的 Activity 传递给 Fragments。我不太确定这样做的正确方法是什么,所以我即兴创作,并newInstance(Object obj)
在我的片段中选择了一个静态片段。此方法只是调用默认 Fragment 的构造函数并设置一个实例变量以将 Object 保存在 Fragment 中。
现在在 Fragment 的createView()
方法中,我使用实例的对象信息来填充布局。这在应用程序启动时工作正常,但是当我将屏幕方向从纵向更改为横向(或相反)时应用程序崩溃。日志表明在 中的实例对象上出现 NullPointerException createView()
。我觉得我错过了生命周期中的某些东西,但我找不到答案。有什么特别的事情要做,所以我的 Fragments 无论如何都会保存它们的实例变量?
这是一个代码示例,可帮助您了解问题所在:
public class MyFragment extends Fragment {
private Object obj;
public static MyFragment newInstance(Object obj) {
MyFragment fragment = new MyFragment();
fragment.setObject(obj);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.layout_fragment, container, false);
MyType res = ((Type) (obj)).getSomething(); // This line causes the crash because obj is null when I switch to another orientation
// I Do something with res to fill rootView
return rootView;
}
private void setObject(Object obj) {
this.obj = obj;
}
}
// In the Activity I simply create the Fragment using
MyFragment fragment = MyFragment.newInstance(myObjectToPass);
谢谢你的帮助 !