如何使用onsaveinstancestate保存一个装满person类型对象的arraylist?

vecaoik1  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(328)

我有这个清单:

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>

我能做些什么来让它工作?我到处找,但似乎找不到解决办法。我只需要列表在屏幕旋转时保持不变。

eulz3vhy

eulz3vhy1#

有几种可能的方法可以解决这个问题:
将列表保存在 onSaveInstanceState() 通过你的课 Person 实施 Parcelable 接口。请参阅有关如何实现的android文档 Parcelable (您将需要实现一些附加方法来保存和恢复数据库中的数据 Person 示例。
使用 onRetainNonConfigurationInstance() 以及 getLastNonConfigurationInstance() . 您可以返回您的 Person 中的对象 onRetainNonConfigurationInstance() 然后你就可以在 onCreate() 当你的 Activity 被重新创建(在android由于方向改变而杀死它之后)。
声明变量 static ,在这种情况下,它将不会被重新初始化后,android杀死你的 Activity 创建一个新的。这不是首选方法,但却是最简单的方法。

相关问题