java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to androidx.appcompat.widget.AppCompatSpinner$SavedState

今天遇到一个返回上一个Fragment闪退的问题,下面是大致代码:

// xxx_layout.xml
<layout>
    <include layout="@layout/view_edit_spinner" />
    <include layout="@layout/view_edit_textview" />
</layout>

// view_edit_spinner.xml
<LinearLayout>

    <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/edit_value"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
</LinearLayout>

// view_edit_textview.xml
<LinearLayout>
    <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/edit_value"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
</LinearLayout>

第一次进入页面正常,当跳转到下一个页面,再返回当前页面时,会报错闪退,而且是系统平台级的,经过排查,是由于引用其他布局文件,不同控件的resId 一样,导致系统尝试恢复原来状态时类型转换错误。

解决方法:android:id=”@+id/edit_value” 中的id不同控件改成不一样的即可