1

When I started writing nested fragments I encountered an unexpected problem. When the application is killed by Android, e.g. when there is a small amount of free RAM, the application throws the following exception after resuming it.

E/Parcel: Class not found when unmarshalling: android.support.design.widget.CoordinatorLayout$SavedState
      java.lang.ClassNotFoundException: android.support.design.widget.CoordinatorLayout$SavedState
          at java.lang.Class.classForName(Native Method)
          at java.lang.Class.forName(Class.java:453)
          at android.os.Parcel.readParcelableCreator(Parcel.java:2888)
          at android.os.Parcel.readParcelable(Parcel.java:2842)
          at android.os.Parcel.readValue(Parcel.java:2745)
          at android.os.Parcel.readSparseArrayInternal(Parcel.java:3195)
          at android.os.Parcel.readSparseArray(Parcel.java:2407)
          at android.os.Parcel.readValue(Parcel.java:2802)
          at android.os.Parcel.readArrayMapInternal(Parcel.java:3114)
          at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:273)
          at android.os.BaseBundle.unparcel(BaseBundle.java:226)
          at android.os.BaseBundle.putBoolean(BaseBundle.java:532)
          at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:960)
          at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:121)
          at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1004)
          at android.support.v4.view.ViewPager.populate(ViewPager.java:1186)
          at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
          at android.support.v4.view.ViewPager$3.run(ViewPager.java:267)
          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
          at android.view.Choreographer.doCallbacks(Choreographer.java:723)
          at android.view.Choreographer.doFrame(Choreographer.java:655)
          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
          at android.os.Handler.handleCallback(Handler.java:790)
          at android.os.Handler.dispatchMessage(Handler.java:99)
          at android.os.Looper.loop(Looper.java:164)
          at android.app.ActivityThread.main(ActivityThread.java:6494)
          at java.lang.reflect.Method.invoke(Native Method)
          at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
       Caused by: java.lang.ClassNotFoundException: android.support.design.widget.CoordinatorLayout$SavedState
          at java.lang.Class.classForName(Native Method)
          at java.lang.BootClassLoader.findClass(ClassLoader.java:1355)
          at java.lang.BootClassLoader.loadClass(ClassLoader.java:1415)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
          at java.lang.Class.classForName(Native Method) 
          at java.lang.Class.forName(Class.java:453) 
          at android.os.Parcel.readParcelableCreator(Parcel.java:2888) 
          at android.os.Parcel.readParcelable(Parcel.java:2842) 
          at android.os.Parcel.readValue(Parcel.java:2745) 
          at android.os.Parcel.readSparseArrayInternal(Parcel.java:3195) 
          at android.os.Parcel.readSparseArray(Parcel.java:2407) 
          at android.os.Parcel.readValue(Parcel.java:2802) 
          at android.os.Parcel.readArrayMapInternal(Parcel.java:3114) 
          at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:273) 
          at android.os.BaseBundle.unparcel(BaseBundle.java:226) 
          at android.os.BaseBundle.putBoolean(BaseBundle.java:532) 
          at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:960) 
          at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:121) 
          at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1004) 
          at android.support.v4.view.ViewPager.populate(ViewPager.java:1186) 
          at android.support.v4.view.ViewPager.populate(ViewPager.java:1086) 
          at android.support.v4.view.ViewPager$3.run(ViewPager.java:267) 
          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) 
          at android.view.Choreographer.doCallbacks(Choreographer.java:723) 
          at android.view.Choreographer.doFrame(Choreographer.java:655) 
          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) 
          at android.os.Handler.handleCallback(Handler.java:790) 
          at android.os.Handler.dispatchMessage(Handler.java:99) 
          at android.os.Looper.loop(Looper.java:164) 
          at android.app.ActivityThread.main(ActivityThread.java:6494) 
          at java.lang.reflect.Method.invoke(Native Method) 
          at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
       Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.design.widget.CoordinatorLayout$SavedState
                  at android.os.Parcel.readParcelableCreator(Parcel.java:2916)
                  at android.os.Parcel.readParcelable(Parcel.java:2842)
                  at android.os.Parcel.readValue(Parcel.java:2745)
                  at android.os.Parcel.readSparseArrayInternal(Parcel.java:3195)
                  at android.os.Parcel.readSparseArray(Parcel.java:2407)
                  at android.os.Parcel.readValue(Parcel.java:2802)
                  at android.os.Parcel.readArrayMapInternal(Parcel.java:3114)
                  at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:273)
                  at android.os.BaseBundle.unparcel(BaseBundle.java:226)
                  at android.os.BaseBundle.putBoolean(BaseBundle.java:532)
                  at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:960)
                  at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:121)
                  at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1004)
                  at android.support.v4.view.ViewPager.populate(ViewPager.java:1186)
                  at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
                  at android.support.v4.view.ViewPager$3.run(ViewPager.java:267)
                  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                  at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                  at android.view.Choreographer.doFrame(Choreographer.java:655)
                  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                  at android.os.Handler.handleCallback(Handler.java:790)
                  at android.os.Handler.dispatchMessage(Handler.java:99)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6494)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

This error occurs only if RecyclerView or CoordinatorLayout in tab fragment are assigned in xml android id. In order to identify the error, I wrote an application in which I reproduced it. https://github.com/RicomenPL/SampleBPE

How to reproduce it?

  1. Enable "dont keep activies" in the development options on the smartphone or emulator
  2. Turn on the SampleBPE application
  3. Move to tabs left or right
  4. Now you have to leave with the Home key
  5. Enter again with the use of the recent apps key
  6. Moving the tabs to the left or right will cause an error
Faierbel
  • 51
  • 1
  • 5

1 Answers1

1

The problem was solved when I downgrade my support libraries to version 26.1.0. This is a temporary solution, to avoid the problem. I hope that in version 28, this will be resolved.

Faierbel
  • 51
  • 1
  • 5
  • Hi, I've the same problem, but I can't downgrade to 26.1.0, because I upgraded to Studio 3.1, and if I downgrade, get this issue: https://stackoverflow.com/questions/47113948/java-lang-nosuchmethoderror-no-static-method-getfontlandroid-content-contexti. So I put super.setUserVisibleHint() into a try-catch block, and now it works "correctly". Anyway, big thanks for the steps how can I reproduce this issue! – user3057944 Mar 30 '18 at 08:51
  • Even I wasn't able to downgrade my app, I tried my previous build and I wasn't able to reproduce this issue. – user3057944 Mar 30 '18 at 09:03
  • Hi, I am glad that I could help. In Android Studio 3.1 I also encountered problems with libraries but I did it like that: https://gist.github.com/RicomenPL/6bfffd254cc278c24b819aee61799309 Support libraries are set to version 26.1.0 but buildToolVersion is set to the latest version that is 27.0.3. I don't know if this is the correct approach but it works and eliminates errors in support libraries version 27.0.3. – Faierbel Apr 04 '18 at 11:43