为了账号安全,请及时绑定邮箱和手机立即绑定

Parcelable 类不生成 Parcelable 对象

Parcelable 类不生成 Parcelable 对象

阿晨1998 2022-04-28 17:07:07
我正在尝试在捆绑包中保存对象的 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);    }
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

在学习 Java 时,我们被教导在声明变量时使用接口类型( List) 而不是实现类型( )。ArrayList您可能在某处有如下代码:


List<ShelfItem> shelfItems = new ArrayList<>();

但是,在特定情况下Bundle和保存列表中,您必须专门使用ArrayList,而不是List一般使用。


如果我是对的,并且您的列表像我上面显示的那样声明,只需将其更改为显式使用ArrayList:


ArrayList<ShelfItem> shelfItems = new ArrayList<>();

如果您从其他地方获取列表,并且您无法控制它的实现类型,则可以new ArrayList在需要保存时构造 a :


@Override

public void onSaveInstanceState(Bundle savedInstanceState) {

    super.onSaveInstanceState(savedInstanceState);

    ArrayList<ShelfItem> toSave = new ArrayList<>(shelfItems);

    savedInstanceState.putParcelableArrayList("key", toSave);

}


查看完整回答
反对 回复 2022-04-28
  • 1 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号