Parcelable 类不生成 Parcelable 对象

我正在尝试在捆绑包中保存对象的 ArrayList(ListshelfItems),以便在下次打开活动时检索它。

(活动从 Firestore 获取信息,我想在每次打开活动时减少读取并缩短加载时间)。

但我收到此错误消息:

savedInstanceState.putParcelableArrayList("key", shelfItems);

“android.os.Bundle”中的“putParcelableArrayList(java.lang.String, java.util.ArrayList)”不能应用于“(java.lang.String, java.util.List)”

这就是我尝试保存列表的方式:


@Override

    public void onSaveInstanceState(Bundle savedInstanceState) {

        super.onSaveInstanceState(savedInstanceState);

        savedInstanceState.putParcelableArrayList("key", shelfItems);

    }


阿晨1998
浏览 187回答 1
1回答

慕森卡

在学习 Java 时,我们被教导在声明变量时使用接口类型( List) 而不是实现类型( )。ArrayList您可能在某处有如下代码:List<ShelfItem> shelfItems = new ArrayList<>();但是,在特定情况下Bundle和保存列表中,您必须专门使用ArrayList,而不是List一般使用。如果我是对的,并且您的列表像我上面显示的那样声明,只需将其更改为显式使用ArrayList:ArrayList<ShelfItem> shelfItems = new ArrayList<>();如果您从其他地方获取列表,并且您无法控制它的实现类型,则可以new ArrayList在需要保存时构造 a :@Overridepublic void onSaveInstanceState(Bundle savedInstanceState) {&nbsp; &nbsp; super.onSaveInstanceState(savedInstanceState);&nbsp; &nbsp; ArrayList<ShelfItem> toSave = new ArrayList<>(shelfItems);&nbsp; &nbsp; savedInstanceState.putParcelableArrayList("key", toSave);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java