簡體   English   中英

屏幕旋轉時標簽更改[Android]

[英]Tab change on screen rotation [Android]

嗨,我有4個標簽的Android APP(讓我們說tab1,tab2,tab3,tab4)。 當活動開始時,默認選項卡是tab1。 我切換到任何其他選項卡(tab2,3或4)並更改屏幕方向,它總是重置為默認選項卡(tab1)。

我嘗試使用以下代碼:

@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是private int,默認設置為0,但它在TabChange上設置:

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

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

簡而言之:我希望Tab在屏幕旋轉時不會更改為默認值...

問題是,在配置更改(如屏幕旋轉)上,當前活動會被破壞並重新創建。 如果是選項卡活動,則包括選項卡活動本身以及每個選項卡的活動。

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

要解決此問題,您可以覆蓋選項卡活動的onRetainNonConfigurationInstance()並返回當前選定的選項卡。 在選項卡活動的on onCreate中,然后調用getLastNonConfigurationInstance() ,它返回您在onRetainNonConfigurationInstance()中返回的對象。 如果對象為null,則表示沒有方向更改,因此您只需選擇第一個選項卡,如果它不為null,則表示屏幕旋轉,您可以使用返回的值來確定之前選擇的選項卡並設置它再次。

要擴展Flo的答案 - 自Honeycomb 3.2(API 13)以來,不推薦使用Activity方法onRetainNonConfigurationInstance() ):

此方法在API級別13中已棄用。
使用新的Fragment API setRetainInstance(boolean)代替; 這也可以通過Android兼容包在舊版平台上使用。

恕我直言,使用更容易一些。

因此,您必須通過覆蓋活動中的onSaveInstanceState(Bundle)來實現此目的

當重新創建屏幕旋轉活動時

編輯:

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

暫無
暫無

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

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