在方向更改期间保存标签状态

问题描述:

我有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)); 

} 

我想知道,是我的做法正确与否&上面的代码是否是一个适当的方式在改变方向时保存标签状态。

这不是最好的方法。您应该使用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

这不是它应该做的方式......改用:

@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