gpt4 book ai didi

android - 为什么我的自定义对象没有被 onSaveInstanceState 和 onRestoreInstanceState 持久化

转载 作者:行者123 更新时间:2023-11-29 21:07:46 26 4
gpt4 key购买 nike

当 Activity 第一次被调用时,它会在 Intent 中带有额外的调用。额外的部分被接收并存储在数据成员中:

class EditBlindScheduleActivity extends Activity
{
private BlindSchedule blindSchedule;

protected void onCreate(Bundle savedInstanceState)
{
...

if (savedInstanceState == null) { // Not recreating, first load.
blindSchedule = (BlindSchedule) getIntent().getSerializableExtra("blindSchedule");
}

有一个简单的 if/else 来确定我们是否有 blindSchedule 对象。

if (blindSchedule == null) {
setTitle("Create Blind Schedule");
} else {
setTitle("Edit Blind Schedule");
}

当我第一次加载 Activity 时,确实,标题是“Edit Blind Schedule”,这意味着有一个 blindSchedule 对象。

不幸的是,当我旋转屏幕两次时,标题显示为“Create Blind Schedule”,这意味着 blindSchedule 对象为 null 并且未能持久化。

为什么我的 blindSchedule 对象没有被持久化,我该怎么办?

完整代码如下:

public class EditBlindScheduleActivity extends Activity {

private BlindSchedule blindSchedule;

Boolean creating; // Creating or updating?

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_blind_schedule);

if (savedInstanceState == null) { // Not recreating, first load.
blindSchedule = (BlindSchedule) getIntent().getSerializableExtra("blindSchedule");
}

if (blindSchedule == null) {
creating = true;
setTitle("Create Blind Schedule");
} else {
creating = false;
setTitle("Edit Blind Schedule");
}
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
blindSchedule = (BlindSchedule) savedInstanceState.getSerializable("blindSchedule");
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("blindSchedule", blindSchedule);
}

最佳答案

在您的案例中,您需要在 onCreate 中检索保存的自定义对象。

根据 Official Documentation

onRestoreInstanceStateonStart 之后调用,此时您的 setTitle 已被调用。

将 else 部分添加到 if (savedInstanceState == null) 并以与 getIntent 相同的方式检索 blindSchedule

if (savedInstanceState == null) 
{ // Not recreating, first load.
blindSchedule = (BlindSchedule) getIntent().getSerializableExtra("blindSchedule");
}
else
{
blindSchedule = (BlindSchedule) savedInstanceState.getSerializableExtra("blindSchedule");
}

关于android - 为什么我的自定义对象没有被 onSaveInstanceState 和 onRestoreInstanceState 持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com