2011-04-15 54 views
2

您好我有4個選項卡(讓我們說tab1,tab2,tab3,tab4)的Android應用程序。當活動開始時,默認選項卡是tab1。比我切換到任何其他選項卡(選項卡2,3或4)並更改屏幕方向,它總是重置爲默認選項卡(選項卡1)。在屏幕旋轉選項卡更改[Android]

我試着用下面的代碼:

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.main); 
    createView(); 
} 

而且裏面CreateView的(),我有:

private void createView() 
{ 
... // Tabs are created before 
tabHost.getTabWidget().setCurrentTab(CurrentTab); 
} 

CurentTab是私人詮釋,並默認設置爲0,但它被設置在TabChange :

public void onTabChanged(String tabId) { 
    ... some code 
    CurrentTab = tabHost.getCurrentTab(); 
} 

我堆放在這裏...有沒有其他方法可以解決這個問題?

不久:我想要的標籤沒有改變默認在屏幕上旋轉......

回答

7

的問題是,在configur如同屏幕旋轉一樣,當前活動被破壞並重新創建。如果選項卡活動包含選項卡活動本身以及每個選項卡的活動。

所以當它重新創建時,它只是顯示第一個選項卡,因爲它沒有其他信息。

要解決此問題,您可以覆蓋您的選項卡活動的onRetainNonConfigurationInstance()並返回當前選定的選項卡。在選項卡活動的onCreate上,然後調用getLastNonConfigurationInstance(),它返回您在onRetainNonConfigurationInstance()中返回的對象。如果該對象爲空,則知道沒有方向更改,因此只需選擇第一個選項卡,如果它不爲空,則會出現屏幕旋轉,並且您可以使用返回的值決定之前選擇哪個選項卡並設置它再次。

+0

這個解決方案聽起來很完美......是否有可能將更多的數據存儲到Object並重用它?我會感謝短代碼預覽...謝謝! – 2011-04-18 07:44:33

+0

由於方法簽名只說你必須返回一個對象,你可以返回你想要的東西。所以如果你想返回多個對象,只需實現一個容器類,它可以存儲你需要的所有對象。 – Flo 2011-04-18 12:19:08

2

所以你必須在你的活動的onSaveInstanceState覆蓋(束)

堂妹時屏幕來實現這個旋轉活動重新

編輯:

protected void onSaveInstanceState (Bundle outState){ 
    outState.putInt("LastTab", tabHost.getCurrentTab()); 
} 


protected void onCreate (Bundle savedInstanceState){ 
    super.onCreate (savedInstanceState); 
    //...tabs creation 
    // u need to provide some code to check if "LastTab" exists in savedState 
    tabHost.getTabWidget().setCurrentTab(savedInstanceState.getInt("LastTab")); 
} 
+0

你的意思是?像: '@Override public void onTabChanged(String tabId,Bundle savedInstanceState){super.onCreate(savedInstanceState); ...部分代碼 CurrentTab = tabHost.getCurrentTab(); }' – 2011-04-15 11:40:55

+0

Flo版本在這種情況下更好 – Selvin 2011-04-15 12:06:55