每当我通过按home键或开始一个新的活动离开我的片段ViewPager
时,我就会崩溃。我相信这与onPause
被调用有关,因为如果我离开活动。
还有其他人在ViewPagers
和Fragments
中遇到过这个问题吗?
我看到另一个线程,家伙只是把他的片段设置为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中恢复这些状态变量。