I think you are experiencing a likely symptom of Issue 19917. This bug exists in 3.2 and higher and was only fixed recently (4.2). This same fix hasn't made its way in to the support library, yet.
Check out comment 28 for a real fix: you'll want to edit your support library and recompile. edit v4/java/android/support/v4/app/FragmentManager.java
Bundle saveFragmentBasicState(Fragment f) {
Bundle result = null;
if (mStateBundle == null) {
mStateBundle = new Bundle();
}
f.onSaveInstanceState(mStateBundle);
if (!mStateBundle.isEmpty()) {
result = mStateBundle;
mStateBundle = null;
}
if (f.mView != null) {
saveFragmentViewState(f);
}
if (f.mSavedViewState != null) {
if (result == null) {
result = new Bundle();
}
result.putSparseParcelableArray(
FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);
}
if (!f.mUserVisibleHint) {
// Only add this if it's not the default value
// @@@ BUG, result may not have been created, can be null!
if (result == null) {
result = new Bundle();
}
result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);
}
return result;
}
If you dont feel up to the task and want to wait for Google to fix the support library
here is another workaround
Comment 8 for fix you can apply to all your fragments
@Override
public void onSaveInstanceState(Bundle outState) {
//first saving my state, so the bundle wont be empty.
//http://code.google.com/p/android/issues/detail?id=19917
outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
super.onSaveInstanceState(outState);
}
I've also come across transaction.commitAllowingStateLoss();
as a "fix" for this instead of transaction.commit();
Some other background info and workaround I've found that are related that helped me with fragment issues (esp. when nesting them)