在方向更改期间保存选项卡状态

时间:2011-03-15 20:29:54

标签: android

我有两个标签,例如Tab1& Tab2显示在屏幕上。让标签显示在肖像方向上。

Tab1显示Activity1& Tab2显示Activity2。

目前,选定的选项卡状态为Tab2。现在,我将PORTRAIT的方向更改为LANDSCAPE。在将方向更改为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 个答案:

答案 0 :(得分:17)

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

@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"));
     }
}

Robby的解决方案也可以使用onRetainNonConfigurationInstance方法。我实际上喜欢并喜欢onSaveInstanceState以上的方法,因为它允许您保存代表应用状态的复杂对象,而不仅仅是Bundle内的parceable。

那么何时使用其中一个?这取决于您保存/恢复应用程序状态所需的数据。对于像保存选项卡状态这样的简单事情,它几乎是一样的。

答案 1 :(得分:2)

这不是最好的方式。您应该使用onRetainNonConfigurationInstance()和getLastNonConfigurationInstance()来保持配置更改之间的状态。这些方法专门用于在配置更改期间保存状态。

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

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