我正在尝试在捆绑包中保存对象的 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);
}
添加回答
举报
0/150
提交
取消