0

我正在使用操作栏选项卡导航,当我旋转屏幕时,我得到 IndexOutOfBoundsException

根据logcat问题在getSupportActionBar().setSelectedNavigationItem( savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Restore the previously serialized current tab position.
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
        getSupportActionBar().setSelectedNavigationItem(
                savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    // Serialize the current tab position.
    outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getSupportActionBar()
            .getSelectedNavigationIndex());
}

编辑
我发现了问题。我使用 AsyncTask 收集将显示在选项卡中的所有信息,并在onPostExecute.

onRestoreInstanceState之前调用过,onPostExecute所以标签计数仍然为 0。

4

2 回答 2

2

尝试

if (savedInstanceState!= null && savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM) >= 0)

反而if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM))

于 2013-02-14T10:14:44.053 回答
1

我不确定onSaveInstanceState屏幕旋转时是否调用。
由于此文档, “在将活动置于这种背景状态之前调用了 onSaveInstanceState(Bundle) 方法”。

您是否检查过屏幕旋转时是否调用了该函数?

于 2013-02-14T10:15:40.833 回答