1

根据 onSaveInstanceState 的文档:

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

和 onRestoreInstanceState:

此方法的默认实现会恢复以前冻结的任何视图状态

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

我误解了意思吗?

4

1 回答 1

4

默认实现将适用于每个定义了 id 的小部件。例如,如果您有一个 EditText,并且您将提供其 id,那么当 Activity 由于方向和相同而被杀死时,系统将保存其值,并在重新创建 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");
    }
}
于 2012-11-13T06:28:33.210 回答