2

我想从以下 Android 片段文档中了解一些内容: Android 片段文档

在页面末尾的示例中,mCurCheckPosition int 作为“curChoice”保存在包中:

@Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("curChoice", mCurCheckPosition);
    }

但是,在示例开始时,当检查并可能检索“curChoice”时,提供了第二个参数“0”:

 if (savedInstanceState != null) {
            // Restore last state for checked position.
            mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
        }

这个零在那里做什么?当然,引用“curChoice”的目的是首先检索保存在它下面的值?

4

3 回答 3

4

这个零在那里做什么?

引用文档,它是“如果 [the] 键不存在则返回的值”。

当然,引用“curChoice”的目的是首先检索保存在它下面的值?

是的,在这种情况下,默认值似乎是多余的。一般来说,默认值是针对有条件地将键添加到的情况Bundle,因此消费者Bundle可以干净地处理未添加键的情况。

于 2017-10-15T13:29:30.587 回答
2

当然,引用“curChoice”的目的是首先检索保存在它下面的值?

我回复了:是的,开发者的意图很明确,就是要获取保存在 savedInstance 中的值,但是可能会出现以下情况:

键,给定检索值!=键,将数据插入到 savedInstance

因此开发人员还提供了一个默认值(在您的情况下为 O),用于防止空指针异常

于 2017-10-15T13:40:13.563 回答
0

如果在 savedInstanceState 中没有“curChoice”键,这是分配给“mCurCheckPosition”的默认值。将其视为片段正在恢复的情况(因此 savedInstanceState 不会为空)但没有“curChoice”。

于 2017-10-15T13:29:53.593 回答