Reputation: 3412
I have an Activity
called HomeActivity
, which uses fragments HomeFragment
and OwnershipFragment
.
When I click a listview item in HomeFragment
, a fragment transaction is carried out and OwnershipFragment
is started.
In OwnershipFragment
I have the following onSaveInstanceState
method:
@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);
}
And in onCreateView
...
@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;
}
Basically, the app crashes after the following:
OwnershipFragment
. (works fine)HomeFragment
and puts OwnershipFragment
on the back stack. (works fine)NullPointerException
at:for(int i = 0; i < mDirectors.size(); i++) //in the onSaveInstanceState method
I can't figure out why though because I can't find where mDirectors
is assigned a null
value. I'm not sure what other code to provide, so just let me know and i'll put it in.
Why is onSaveInstanceState
of OwnershipFragment
called in the first place if the current fragment displayed is HomeFragment
?
Here's my Logcat:
07-15 11:28:24.440: E/AndroidRuntime(12150): FATAL EXCEPTION: main
07-15 11:28:24.440: E/AndroidRuntime(12150): java.lang.NullPointerException
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.opendoors.core.OwnershipFragment.onSaveInstanceState(OwnershipFragment.java:204)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1598)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1655)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Activity.onSaveInstanceState(Activity.java:1233)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:546)
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.opendoors.core.HomeActivity.onSaveInstanceState(HomeActivity.java:220)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Activity.performSaveInstanceState(Activity.java:1181)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1233)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3778)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread.access$800(ActivityThread.java:152)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1288)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.os.Handler.dispatchMessage(Handler.java:99)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.os.Looper.loop(Looper.java:137)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread.main(ActivityThread.java:5328)
07-15 11:28:24.440: E/AndroidRuntime(12150): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 11:28:24.440: E/AndroidRuntime(12150): at java.lang.reflect.Method.invoke(Method.java:511)
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-15 11:28:24.440: E/AndroidRuntime(12150): at dalvik.system.NativeStart.main(Native Method)
Upvotes: 2
Views: 759
Reputation: 44844
As per your comment, change you definition of mDirectors
to
ArrayList<Director> mDirectors = new ArrayList<Director>();
or check for null in your for as
for(int i = 0; mDirectors != null && i < mDirectors.size(); i++)
Upvotes: 1