java - 如何使用 onSaveInstanceState 保存填充了 person 类型的对象的数组列表?
问题描述
我有这个清单:
private ArrayList<Person> people = new ArrayList<>();
这个名单上到处都是随机的人。每当我转动屏幕时,列表都会刷新并出现一个新列表。我不希望这种情况发生。
我试图用这样的 onSaveInstanceState 方法来做到这一点:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList("key", people);
}
但我收到以下错误:
Required type: ArrayList <? extends Parcelable>
Provided: ArrayList<Person>
我可以通过将代码更改为:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList("key", (ArrayList<? extends Parcelable>) people);
}
但是,当我转到要加载数据的 onCreate 方法时,我使用以下代码:
if(savedInstanceState != null)
{
people = savedInstanceState.getParcelableArrayList("key");
}
我收到以下错误:
Required type: ArrayList <Person>
Provided: ArrayList<Parcelable>
我能做些什么来完成这项工作?我到处寻找,但似乎找不到解决方案。每当屏幕旋转时,我只需要列表保持不变。
解决方案
有几种可能的方法可以解决这个问题:
onSaveInstanceState()
通过让您的类Person
实现Parcelable
接口来保存列表。请参阅有关如何实现的 Android 文档Parcelable
(您将需要实现一些额外的方法来保存和恢复Person
实例中的数据。- 使用
onRetainNonConfigurationInstance()
和getLastNonConfigurationInstance()
。您可以返回您的Person
对象列表,onRetainNonConfigurationInstance()
然后您可以在重新创建onCreate()
时检索它Activity
(在 Android 由于方向更改而杀死它之后)。 - 声明变量
static
,在这种情况下它不会在 Android 杀死你Activity
并创建一个新变量后重新初始化。这不是首选方法,但它是最简单的方法。
推荐阅读
- powershell - 使用管道对象填充 mail -to 和 -attachment
- vba - VBA:添加到用户窗体的标题,当前文本已经作为标题
- c++ - WiringPi C++串口函数随机停止工作
- c# - 为什么“在哪里”改变原始数据类型
- python - 在python中按特定顺序查找子字符串
- javascript - 你如何比较两个数组,并找出有多少值是相似的?
- excel - 使用 .PasteSpecial 时,运行时错误 438 对象不支持此属性或方法
- swift - 如何检测来自 NSWindowController 内的 NSToolbarItem 的点击?
- ruby - 当方法仅返回 false 时,如何调试 ruby-ldap?
- python - 如何使用 matplotlib hlines 生成子图