onSaveInstanceState / onRestoreInstanceState和视图状态

时间:2012-11-13 06:20:20

标签: android android-activity savestate

根据onSaveInstanceState的文档:

  

默认实现负责处理大多数UI实例状态

和onRestoreInstanceState:

  

此方法的默认实现执行先前已冻结的任何视图状态的恢复

我不确定这意味着什么。 是否意味着在被杀死后现在恢复后返回时,显示给用户的UI屏幕会自动恢复其所有数据? 如果是这样,我没有看到。 我得到的只是一个空屏幕,除非我自己设置setContentView。

上午我误解了这个意思?

1 个答案:

答案 0 :(得分:4)

默认实现适用于定义了id的每个小部件。 例如,如果你有一个EditText,并且你将提供它的id,那么当Activity因为方向而被杀死时系统会保存它的值,并且它将在重新创建活动时恢复EditText值。

修改

如果您有一个基本布局,并且如果您在视图层次结构中动态添加一些视图,那么您将必须处理保存状态并恢复您自己的状态。当你的活动将被重新创建时,将调用活动的onCreate()方法,因此在此方法中首先设置您正在创建并动态添加的所有添加视图,然后您可以检查具有您的意图的额外参数正在进入onCreate()方法。这些额外参数与您在onSaveInstanceState方法中添加额外参数完全相同。

如下所示。

int x = 10;
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("x", x);
}

在onCreate方法中,您可以获得如下所示的x参数

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xxx);

    if(savedInstanceState.containsKey("x")) {
        x = savedInstanceState.getInt("x");
    }
}