2011-03-15 82 views
8

我有2個標籤,例如Tab1 & Tab2它顯示在屏幕上。讓標籤顯示在PORTRAIT方向上。在方向更改期間保存標籤狀態

Tab1顯示Activity1 & Tab2顯示Activity2。

當前,所選標籤狀態是Tab2。現在,我將PORTRAIT的方向改爲LANDSCAPE。將方向更改爲「景觀」模式時,不顯示「Tab2」,而是顯示「當前Tab1」。

基本上,我想在有方向更改時保存Tab狀態。

爲了執行保存選項卡狀態的目的,我寫了下面的代碼:

protected void onPause() { 
    super.onPause(); 
    saveCurrentTabState(getSelectedTab()); 
} 

private void saveCurrentTabState(int value) { 
    PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(
      "tabState", value).commit(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    setCurrentTab(PreferenceManager.getDefaultSharedPreferences(this) 
      .getInt("tabState", 0)); 

} 

我想知道,是我的做法正確與否&上面的代碼是否是一個適當的方式在改變方向時保存標籤狀態。

回答

2

這不是最好的方法。您應該使用onRetainNonConfigurationInstance()和getLastNonConfigurationInstance()來保留配置更改之間的狀態。這些方法專門用於在配置更改期間保存狀態。 。

public Object onRetainNonConfigurationInstance() { 
    return mTabHost.getCurrentTab(); 
} 

public void onCreate() { 
    ... 
    Integer lastTab = (Integer) getLastNonConfigurationInstance(); 
    if(lastTab != null) { 
     mTabHost.setCurrentTab(lastTab); 
    } 
    ... 
} 
+0

感謝Robby的回覆。你能否詳細說明/提供有關lastTab參數和方法setActiveTab(lastTab)的詳細信息? – chiranjib 2011-03-15 21:06:54

+0

lastTab只是一個localVariable。我會更新這個例子。 – 2011-03-15 22:57:09

18

這不是它應該做的方式......改用:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("tabState", getSelectedTab()); 
} 

然後,在onCreate方法:

public void onCreate(Bundle state){ 
    // do the normal onCreate stuff here... then: 
    if(state != null){ 
     setCurrentTab(state.getInt("tabState")); 
    } 
} 

的羅比的解決方案也可以工作,並使用包括onRetainNonConfigurationInstance方法。我實際上喜歡這種方法而不是onSaveInstanceState,因爲它允許保存一個代表應用程序狀態的複雜對象,而不僅僅是Bundle中的parceables。

那麼何時使用其他的?這取決於您需要保存/恢復應用程序狀態的數據。對於保存標籤狀態等簡單的事情來說,它幾乎是一樣的。

+7

你還可以得到位置'mActionBar.getSelectedTab()爲getPosition()'和'用mActionBar.setSelectedNavigationItem(INT)'當這個問題被問 – Dori 2012-05-02 15:40:46

+0

動作條不存在設置/回答;另外,他正在使用'TabHost'類。 – Cristian 2012-05-02 17:11:05

+0

啊對不起! :/ 我的錯! – Dori 2012-05-03 16:54:19

相關問題