簡體   English   中英

在方向更改期間保存選項卡狀態

[英]Save the Tab state during orientation change

我有2個選項卡,例如Tab1和Tab2,它顯示在屏幕上。 讓標簽顯示在PORTRAIT方向上。

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

}

我想知道,我的方法是否正確以及上述代碼是否是在更改方向時保存選項卡狀態的正確方法。

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

@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 parceables。

那么何時使用其中一個呢? 這取決於您保存/恢復應用程序狀態所需的數據。 對於像保存選項卡狀態這樣的簡單事情,它幾乎是一樣的。

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM