我读过SO,似乎无法找到有关我的问题的任何答案。我有一个自定义对象的ArrayList,它实现了Parcelable
listOfBuddies
。我正在尝试使用以下代码保存它的状态...
@Override
public void onSaveInstanceState(Bundle buddies){
buddies.putParcelable("buddies", listOfBuddies);
super.onSaveInstanceState(buddies);
}
@Override
public void onRestoreInstanceState(Bundle buddies) {
listOfBuddies = buddies.getParcelable("buddies");
super.onRestoreInstanceState(buddies);
}
public void onStart(Bundle buddies) {
super.onStart();
listOfBuddies = buddies.getParcelable("buddies");
}
@Override
public void onCreate(Bundle buddies) {
super.onCreate(buddies);
setContentView(R.layout.buddylist);
if(buddies != null){
listOfBuddies = buddies.getParcelable("buddies");
}
}
但是,重启Acitivty后,好友总是在OnCreate中返回null。也许我正在解决这个错误...但基本上我想在我的应用程序运行时存储对象的ArrayList。
答案 0 :(得分:0)
我不确定这是否有效,但我确实有一个建议。不要让ArrayList本身实现Parcelable,而是尝试设置自定义对象以实现Parcelable。然后使用putParcelableArrayList和getParcelableArrayList来检索列表。
答案 1 :(得分:0)
onSaveInstanceState仅在软杀死时被调用,例如电话方向改变。在硬杀死时,你需要保持活动状态,也许是通过写入prefs。如果你选择这种持久化状态的方法,那么不用说如果bundle是null你将需要读取prefs。所以逻辑是这样的:
在onResume中将标志isSaveInstanceState设置为false 在onSavedInstanceState中将标志设置为true 在onStop if!isSavedInstanceState写入prefs
on onCreate:
如果bundle!= null从包中检索状态 否则从prefs中检索状态
类似文档的数据是一种不同的动物,可以通过onPause中的数据库写入来保留。