保存自定义对象的ArrayList状态

时间:2010-08-12 16:38:38

标签: android

我的Activity中有一个成员变量,它是一个ArrayList。填充此ArrayList的对象是我定义的名为RatingItem的对象。 RatingItem有几个成员变量,如评级,评论,ID等。

我想将此ArrayList保存在onSaveInstanceState中,以便可以从onRestoreInstanceState重新填充它。做这个的最好方式是什么?我从来没有保存过这种复杂性的对象的状态。

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

您应该拥有对象实现Parcelable。基本上,您必须添加方法来从Parcel编写和读取对象的成员,然后添加具有几个静态工厂方法的自定义CREATOR内部类。在第一个链接页面上有一个演示,但它并不太难。

然后,您可以使用Bundle.putParcelableArrayList()一次性保存整个列表。 (当您使用Bundle.getParcelableArrayList()将其返回时,您必须将列表强制转换,但它会正常工作。)

答案 1 :(得分:1)

一种选择是在onSaveInstanceState中遍历您的ArrayList并执行类似

的操作
RatingItem ri = list.get(i);
ri.saveState(bundle);

然后,自定义saveState调用可以将其个别状态保存到捆绑包中,如下所示:

static final String RATING_KEY = "RATING_KEY";
int myId;
int myRating;

void saveState(bundle)
{
    bundle.putInt(RATING_KEY + "_" + myId, myRating);
}

myId成员字段应在RatingItem的构造函数中设置,用于确保项目中的所有成员字段可以在还原时链接回特定项目(通过颠倒上面的内容并使用{ {1}}使用适当的密钥+ id)。