退出Fragment后,在onSaveInstanceState中抛出NullPointerException

时间:2014-07-15 06:15:38

标签: java android android-fragments nullpointerexception android-lifecycle

我有一个名为Activity的{​​{1}},它使用片段HomeActivityHomeFragment

当我点击OwnershipFragment中的列表视图项时,会执行片段事务并启动HomeFragment

OwnershipFragment我有以下OwnershipFragment方法:

onSaveInstanceState

并在@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); for(int i = 0; i <mDirectors.size(); i++) mDirectors.get(i).updateFromForm(); outState.putSerializable(DIRECTORS, mDirectors); } ...

onCreateView

基本上,应用程序崩溃后会发生以下情况:

  1. 我点击打开@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.fragment_ownership, container, false); mFormContainer = (LinearLayout) rootView.findViewById(R.id.ownership_form_container); mManager = new SessionManager(getActivity()); mDirectors = new ArrayList<Director>(); if (savedInstanceState != null) mDirectors = (ArrayList<Director>) savedInstanceState.getSerializable(DIRECTORS); else mDirectors = mManager.getDirectors(); //Other stuff return rootView; } 的列表视图项。 (工作正常)
  2. 我按下后退按钮,开始一个返回OwnershipFragment的事务并将HomeFragment放在后面的堆栈上。 (工作正常)
  3. 我将手机转为横向模式。 (工作正常)
  4. 我将其转回肖像,应用程序崩溃并在OwnershipFragment处显示:
  5.   

    for(int i = 0; i&lt; mDirectors.size(); i ++)//在onSaveInstanceState方法中

    我无法弄清楚为什么,因为我无法找到NullPointerException被赋予mDirectors值的位置。我不确定提供什么其他代码,所以请告诉我,我会把它放进去。

    如果显示的当前片段为null,为什么onSaveInstanceState的{​​{1}}首先被调用?

    这是我的Logcat:

    OwnershipFragment

1 个答案:

答案 0 :(得分:1)

根据您的评论,将mDirectors的定义更改为

ArrayList<Director> mDirectors = new ArrayList<Director>();

或在for for中检查null为

for(int i = 0; mDirectors != null && i < mDirectors.size(); i++)