2013-02-14 27 views
0

我使用操作欄標籤導航,當我旋轉屏幕,我得到IndexOutOfBoundsException異常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

回答

1

我不知道,如果當屏幕是onSaveInstanceState被稱爲旋轉。
由於this documentationonSaveInstanceState(Bundle)方法在將活動置於這種背景狀態之前調用」。

您是否檢查過屏幕旋轉時是否調用該功能?

+0

它被調用,如果我把System.out.println()放在那個方法裏面,它會向logcat輸出消息。 – pedja 2013-02-14 10:33:11

+0

嗯..他告訴你什麼,如果你在存儲和恢復時調用'getTabCount()',另外 - 爲了確保 - 在存儲時保存時是否會得到與恢復相同的整型值? – MalaKa 2013-02-14 10:56:17

+0

如果我調用'System.out.println(getSupportActionBar()。getNavigationItemCount());'in'onRestoreIn ......'我總是得到0。在'onSaveInstanceState'我得到正確的標籤計數。 – pedja 2013-02-14 11:02:35

2

嘗試

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

代替if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM))

+0

Stil同樣的問題 – pedja 2013-02-14 10:30:57