从更改HorizontalScrollView的高度后
<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)
在HorizontalScrollView中此方法发生崩溃
@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
可能会导致这种情况,因此引起我的注意的是,我最近添加了一个与HorizontalScrollView包含在同一布局中的视图,并且该视图可以容纳该视图>
<RelativeLayout
android:id="@+id/topics_scroll_view"
android:layout_width="match_parent"
android:layout_height="92dp"/>
这可能是问题吗?
答案 0 :(得分:2)
是的,绝对是因为您在两个布局中使用了相同的ID。
首先,交叉检查您的应用程序是否不在两个不同的地方重复使用相同的ID。
onRestoreInstanceState
执行了findViewById
方法,发现的第一个视图不是HorizontalScrollView。