public void restoreState(Parcelable paramParcelable, ClassLoader paramClassLoader) { if (paramParcelable != null) { paramParcelable = (Bundle) paramParcelable; paramParcelable.setClassLoader(paramClassLoader); paramClassLoader = paramParcelable.getParcelableArray("states"); mSavedState.clear(); mFragments.clear(); int i; if (paramClassLoader != null) { i = 0; while (i < paramClassLoader.length) { mSavedState.add((Fragment.SavedState) paramClassLoader[i]); i += 1; } } paramClassLoader = paramParcelable.keySet().iterator(); while (paramClassLoader.hasNext()) { String str = (String) paramClassLoader.next(); if (str.startsWith("f")) { i = Integer.parseInt(str.substring(1)); Fragment localFragment = mFragmentManager.getFragment(paramParcelable, str); if (localFragment != null) { while (mFragments.size() <= i) { mFragments.add(null); } localFragment.setMenuVisibility(false); mFragments.set(i, localFragment); } else { Log.w("FragmentStatePagerAdapter", "Bad fragment at key " + str); } } } } }
@Override public void restoreState(Parcelable state, ClassLoader loader) { if (state != null) { Bundle bundle = (Bundle) state; bundle.setClassLoader(loader); ArrayList<FragmentState> fs = bundle.getParcelableArrayList("states_fragment"); ArrayList<Bundle> args = bundle.getParcelableArrayList("arg_fragment"); ArrayList<String> tags = bundle.getStringArrayList("tag_fragment"); ArrayList<String> classNames = bundle.getStringArrayList("classname_fragment"); mFragments.clear(); mFragmentStates.clear(); mFragmentTags.clear(); mFragmentClassNames.clear(); mFragmentArgs.clear(); if (fs != null) { for (int i = 0; i < fs.size(); i++) { FragmentState fragmentState = fs.get(i); mFragmentStates.add(fragmentState); if (fragmentState != null) { mFragmentArgs.add(fragmentState.mArguments); mFragmentTags.add(fragmentState.mTag); mFragmentClassNames.add(fragmentState.mClassName); } else { mFragmentArgs.add(args.get(i)); mFragmentTags.add(tags.get(i)); mFragmentClassNames.add(classNames.get(i)); } mFragments.add(null); } } Iterable<String> keys = bundle.keySet(); for (String key : keys) { if (key.startsWith("f")) { int index = Integer.parseInt(key.substring(1)); Fragment f = null; try { f = mFragmentManager.getFragment(bundle, key); } catch (Throwable ex) { ex.printStackTrace(); } if (f != null) { f.setMenuVisibility(false); mFragments.set(index, f); mFragmentArgs.set(index, f.mArguments); mFragmentTags.set(index, f.mTag); mFragmentClassNames.set(index, f.getClass().getName()); } else { Log.w(TAG, "Bad fragment at key " + key); } } } // If restore will change notifyDataSetChanged(); } }