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();
    }
  }