Horizo​​ntalScrollView崩溃onRestoreInstance

时间:2018-07-26 09:26:49

标签: android classcastexception horizontalscrollview

从更改Horizo​​ntalScrollView的高度后

<HorizontalScrollView
                android:id="@+id/topics_scroll_view"
                android:layout_width="match_parent"
                android:layout_height="92dp"/>

<HorizontalScrollView
                android:id="@+id/topics_scroll_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

我开始崩溃了

Caused by java.lang.ClassCastException
              android.view.AbsSavedState$1 cannot be cast to android.widget.HorizontalScrollView$SavedState
              android.widget.HorizontalScrollView.onRestoreInstanceState (HorizontalScrollView.java:1678)

在Horizo​​ntalScrollView中此方法发生崩溃

@Override
protected void onRestoreInstanceState(Parcelable state) {
    if (mContext.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.JELLY_BEAN_MR2) {
        // Some old apps reused IDs in ways they shouldn't have.
        // Don't break them, but they don't get scroll state restoration.
        super.onRestoreInstanceState(state);
        return;
    }
    SavedState ss = (SavedState) state;       //*******this line is crashing
    super.onRestoreInstanceState(ss.getSuperState());
    mSavedState = ss;
    requestLayout();
}

我发现了类似的问题,我怀疑混淆并不能保持Parcelable,他们建议将其添加到proguard文件中

-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}

当我查看我的proguard文件时,我发现我已经包含了以下内容

-keepnames class * implements android.os.Parcelable { *; }
-keepclassmembers class * implements android.os.Parcelable { *; }

谁能区分问题,为什么当我更改android:layout_height时它开始崩溃? 这对任何人有意义吗? 预先感谢

编辑:在阅读了一些类似的问题后,我发现了这个java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.support.v7.widget.Toolbar$SavedState
现在,如果您读了答案,它的说法是对不同的视图使用相同的android:id可能会导致这种情况,因此引起我的注意的是,我最近添加了一个与Horizo​​ntalScrollView包含在同一布局中的视图,并且该视图可以容纳该视图

<RelativeLayout
            android:id="@+id/topics_scroll_view"
            android:layout_width="match_parent"
            android:layout_height="92dp"/>

这可能是问题吗?

1 个答案:

答案 0 :(得分:2)

是的,绝对是因为您在两个布局中使用了相同的ID。

首先,交叉检查您的应用程序是否不在两个不同的地方重复使用相同的ID。

onRestoreInstanceState执行了findViewById方法,发现的第一个视图不是Horizo​​ntalScrollView。