diff --git a/app/src/main/java/com/hippo/widget/recyclerview/EasyRecyclerView.java b/app/src/main/java/com/hippo/widget/recyclerview/EasyRecyclerView.java index 4b3b2bff8..774c3d0d5 100644 --- a/app/src/main/java/com/hippo/widget/recyclerview/EasyRecyclerView.java +++ b/app/src/main/java/com/hippo/widget/recyclerview/EasyRecyclerView.java @@ -977,24 +977,52 @@ public class EasyRecyclerView extends RecyclerView { setViewChecked(view, isItemChecked(position)); } - static class SavedState extends BaseSavedState { + /** + * This saved state class is a Parcelable and should not extend + * {@link android.view.View.BaseSavedState} nor {@link android.view.AbsSavedState} + * because its super class AbsSavedState's constructor + * {@link android.view.AbsSavedState#AbsSavedState(Parcel)} currently passes null + * as a class loader to read its superstate from Parcelable. + * This causes {@link android.os.BadParcelableException} when restoring saved states. + *
+ * The super class "RecyclerView" is a part of the support library, + * and restoring its saved state requires the class loader that loaded the RecyclerView. + * It seems that the class loader is not required when restoring from RecyclerView itself, + * but it is required when restoring from RecyclerView's subclasses. + */ + static class SavedState implements Parcelable { + + public static final SavedState EMPTY_STATE = new SavedState() { + }; + int choiceMode; int checkedItemCount; SparseBooleanArray checkState; LongSparseArray