我的Activity中有一个成员变量,它是一个ArrayList。填充此ArrayList的对象是我定义的名为RatingItem的对象。 RatingItem有几个成员变量,如评级,评论,ID等。
我想将此ArrayList保存在onSaveInstanceState中,以便可以从onRestoreInstanceState重新填充它。做这个的最好方式是什么?我从来没有保存过这种复杂性的对象的状态。
感谢您的帮助
答案 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)。