AbsSavedState cannot be cast to HorizontalScrollView$SavedState


具體報錯信息如下:
java.lang.RuntimeException:Unable to start activity ComponentInfo{com.fsgx.car.android.igo/com.fsgx.car.android.igo.usercenter.mytrips.MyTripsActivity}: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.HorizontalScrollView$SavedState
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2878)
 ......
 Caused by:
 java.lang.ClassCastException:android.view.AbsSavedState$1 cannot be cast to android.widget.HorizontalScrollView$SavedState
 android.widget.HorizontalScrollView.onRestoreInstanceState(HorizontalScrollView.java:1702)
 android.view.View.dispatchRestoreInstanceState(View.java:15781)
 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3271)
 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3277)
 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3277)
 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3277)
 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3277)
 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3277)
 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3277)
 android.view.View.restoreHierarchyState(View.java:15759)
 com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2130)
android.app.Activity.onRestoreInstanceState(Activity.java:1154)
 android.app.Activity.performRestoreInstanceState(Activity.java:1109)
 android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1175)
 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2841)
 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2940)
 android.app.ActivityThread.-wrap12(ActivityThread.java)
 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1663)
 android.os.Handler.dispatchMessage(Handler.java:102)
 android.os.Looper.loop(Looper.java:159)
 android.app.ActivityThread.main(ActivityThread.java:6385)
 java.lang.reflect.Method.invoke(Native Method)
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1096)
 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:883)

報錯原因:

創建控件的時候在其構造方法裏動態創建了一個子控件,並把該控件的AttributeSet參數傳遞給了子控件。

public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    ... ...
    mTabStrip = new SlidingTabStrip(context,attrs);
    ... ...
}

傳遞AttributeSet給子控件會導致子控件與父控件擁有相同的id,因此Android會嘗試將父控件的SavedState恢復給子控件,反之亦然。因此,會導致類型轉換bug。


參考:java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.support.v7.widget.Toolbar$SavedState

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章