ViewPager和Fragments - java.lang.RuntimeException: Parcel:无法封



每当我通过按home键或开始一个新的活动离开我的片段ViewPager时,我就会崩溃。我相信这与onPause被调用有关,因为如果我离开活动。

还有其他人在ViewPagersFragments中遇到过这个问题吗?

我看到另一个线程,家伙只是把他的片段设置为Serializable,但这对我来说似乎有点hacky ?

FATAL EXCEPTION: main
                                                                           Process: com.myapp.myapp, PID: 16504
                                                                           java.lang.RuntimeException: Parcel: unable to marshal value MyFragment{4f941f6 #1 id=0x7f0e0120}
                                                                               at android.os.Parcel.writeValue(Parcel.java:1418)
                                                                               at android.os.Parcel.writeMapInternal(Parcel.java:662)
                                                                               at android.os.Parcel.writeMap(Parcel.java:646)
                                                                               at android.os.Parcel.writeValue(Parcel.java:1336)
                                                                               at android.os.Parcel.writeArrayMapInternal(Parcel.java:686)
                                                                               at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
                                                                               at android.os.Bundle.writeToParcel(Bundle.java:1079)
                                                                               at android.os.Parcel.writeBundle(Parcel.java:711)
                                                                               at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:138)
                                                                               at android.os.Parcel.writeTypedArray(Parcel.java:1254)
                                                                               at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:385)
                                                                               at android.os.Parcel.writeParcelable(Parcel.java:1437)
                                                                               at android.os.Parcel.writeValue(Parcel.java:1343)
                                                                               at android.os.Parcel.writeArrayMapInternal(Parcel.java:686)
                                                                               at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
                                                                               at android.os.Bundle.writeToParcel(Bundle.java:1079)
                                                                               at android.os.Parcel.writeBundle(Parcel.java:711)
                                                                               at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3152)
                                                                               at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3417)
                                                                               at android.os.Handler.handleCallback(Handler.java:739)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                               at android.os.Looper.loop(Looper.java:148)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

带有ViewPager的片段

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/quiz_accent_background">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/textview_current_question"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"
            android:padding="@dimen/content_padding_half"
            android:textSize="@dimen/profile_text_normal"/>
        <TextView
            android:id="@+id/textview_time_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:gravity="right"
            android:padding="@dimen/content_padding_half"
            android:textStyle="bold"
            android:textSize="@dimen/profile_text_normal"/>
    </LinearLayout>
    <include layout="@layout/gray_horizontal_divider_view"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

没有看到你的实际代码,它似乎是你试图存储/检索Fragment从一个包裹的实例?这绝对不是你应该做的一些原因,即使你做你的Fragment实现Serializable,作为任何监听器,回调等,你已经在Fragment将是无效的。

在很多情况下,你可能会尝试这样做,但在你的情况下,从堆栈跟踪来看,这可能是onSaveInstanceState的结果。

而不是试图存储整个Fragment实例,你应该只保留关键的序列化/可Parcelable成员的片段,以表示在onsaveinstsestate片段的状态。然后,在Fragment的onCreate中恢复这些状态变量。

最新更新