ClaseNotFoundException al desmarcar: android.support.v4.view.ViewPager $ SavedState

Estoy viendo el siguiente error en mis informes de fallos de Android:

android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v4.view.ViewPager$SavedState at android.os.Parcel.readParcelable(Parcel.java:1971) at android.os.Parcel.readValue(Parcel.java:1859) at android.os.Parcel.readSparseArrayInternal(Parcel.java:2128) at android.os.Parcel.readSparseArray(Parcel.java:1581) at android.os.Parcel.readValue(Parcel.java:1916) at android.os.Parcel.readMapInternal(Parcel.java:2099) at android.os.Bundle.unparcel(Bundle.java:223) at android.os.Bundle.getSparseParcelableArray(Bundle.java:1225) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:806) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431) at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:160) at android.support.v4.view.ViewPager.populate(ViewPager.java:895) at android.support.v4.view.ViewPager.populate(ViewPager.java:772) at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539) at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422) at android.view.ViewGroup.drawChild(ViewGroup.java:3028) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) at android.view.ViewGroup.drawChild(ViewGroup.java:3184) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) at android.view.ViewGroup.drawChild(ViewGroup.java:3184) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) at android.view.ViewGroup.drawChild(ViewGroup.java:3184) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788) at android.view.View.draw(View.java:11017) at android.widget.FrameLayout.draw(FrameLayout.java:450) at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2175) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2234) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1810) at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2695) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:4977) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method) 

Parece que ocurre intermitentemente al reanudar una actividad. No tengo acceso directo a la clase SavedState en ningún código.

Tuve el mismo error y aquí está lo que hice.

Mi problema provino de usar ViewPager con un FragmentStatePagerAdapter. Dentro de uno de los fragmentos del ViewPager había otro ViewPager. Tener ese segundo paginador de vista causó este insecto raro. Incluso con o sin un adaptador en él.

La solución era simplemente establecer setSaveEnabled (false); En el segundo ViewPager.

La siguiente solución funcionó para mí:

 package android.support.v4.app; import android.os.Bundle; import android.view.ViewGroup; public abstract class FixedFragmentStatePagerAdapter extends FragmentStatePagerAdapter { public FixedFragmentStatePagerAdapter(FragmentManager fm) { super(fm); } @Override public Object instantiateItem(ViewGroup container, int position) { Fragment f = (Fragment)super.instantiateItem(container, position); Bundle savedFragmentState = f.mSavedFragmentState; if (savedFragmentState != null) { savedFragmentState.setClassLoader(f.getClass().getClassLoader()); } return f; } } 

Desde http://code.google.com/p/android/issues/detail?id=37484#c1

Si no desea incluir la fuente en el paquete v4, puede declarar la "corrección" directamente en su adaptador

  @Override public Object instantiateItem(ViewGroup container, int position) { final Object fragment = super.instantiateItem(container, position); try { final Field saveFragmentStateField = Fragment.class.getDeclaredField("mSavedFragmentState"); saveFragmentStateField.setAccessible(true); final Bundle savedFragmentState = (Bundle) saveFragmentStateField.get(fragment); if (savedFragmentState != null) { savedFragmentState.setClassLoader(Fragment.class.getClassLoader()); } } catch (Exception e) { Log.w("CustomFragmentStatePagerAdapter", "Could not get mSavedFragmentState field: " + e); } return fragment; } 

En su Actividad / Fragmento, haga lo siguiente:

 public void onSaveInstanceState(Bundle outState){ //This MUST be done before saving any of your own or your base class's variables final Bundle mapViewSaveState = new Bundle(outState); mapView.onSaveInstanceState(mapViewSaveState); outState.putBundle("mapViewSaveState", mapViewSaveState); //Add any other variables here. super.onSaveInstanceState(outState); } public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); final Bundle mapViewSavedInstanceState = savedInstanceState != null ? savedInstance.getBundle("mapViewSaveState") : null; mapView.onCreate(mapViewSavedInstanceState); //.... } 

Fuente: https://code.google.com/p/gmaps-api-issues/issues/detail?id=6237

U otra solución es:

Map.onCreate (savedInstanceState);

a esto:

Map.onCreate (null);

La respuesta puede ser late.I utilizado FragmentPagerAdapter lugar de utilizar FragmentStatePagerAdapter Trabajó para mí como un encanto!

  • ClassNotFoundException cuando unmarshalling y realmente no sé por qué
  • Herencia parcelable: clase abstracta - ¿QUÉ CREADOR?
  • Falta el campo CREATOR Parcelable?
  • Android BadParcelableException sólo con apk firmado
  • Android.os.TransactionTooLargeException tirado al azar
  • Cómo pasar Drawable usando Parcelable
  • Parcelable y herencia en Android
  • Problema de desacoplamiento de parcelables
  • ¿Por qué algunas veces funciona guardar un Hashtable de objetos no Parcelable en onSaveInstanceState ()?
  • Envío de la lista de objetos del array entre actividades con Parcelable
  • Pasar ArrayList <CustomObject> entre actividades
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.