gpt4 book ai didi

java - 将列表作为可 Parcelable ArrayList 传递

转载 作者:行者123 更新时间:2023-12-01 10:12:57 24 4
gpt4 key购买 nike

嘿,伙计们,我在使用一些代码时遇到了一些问题。我正在实现 Parcelables。基本上我有一个在全局范围内启动的项目列表

private List<Movie> mMovieList = new ArrayList<>();

我希望将其作为可分割的传递以在旋转时保存实例状态。我实现了 saveOnInstanceState 方法和 onCreate

public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList(MOVIE_KEY, (ArrayList< ? extends Parcelable >)mMovieList);
}

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
if (savedInstanceState != null)
{
mMovieList = (List<Movie>)savedInstanceState.get(MOVIE_KEY);
}
}

唯一的问题是它抛出一个错误,并且错误指向 outstate.putParcelableArrayList 行。

java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

有人知道解决这个问题的方法吗?我尝试用谷歌搜索并查看其他 stackoverflow 答案,但找不到有效的答案。

如果有人想查看整个项目,这里是该项目的 GitHub 链接,上面提到的方法尚未提交。 https://github.com/Rykuno/Flix-Viewer

最佳答案

遗憾的是,Android 并没有“对接口(interface)进行编程”。如果 List 不是 ArrayList 那么您别无选择,只能创建一个新的 ArrayList。这没什么大不了的,可以通过编程来完成。

public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
ArrayList<Movie> toSave = mMovieList instanceof ArrayList ?
(ArrayList<Movie>)mMovieList : new ArrayList<Movie>(mMovieList);
outState.putParcelableArrayList(MOVIE_KEY, toSave);
}

关于java - 将列表作为可 Parcelable ArrayList 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36047977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com