3

我使用 layout 和 layout-land 为横向和纵向指定了不同的布局,我的应用程序有多个选项卡。每次从纵向更改为横向或横向更改为纵向屏幕更改为第一个选项卡时,即使选择的选项卡也不同。我们怎样才能解决这个问题。

4

3 回答 3

2

默认情况下,旋转设备会破坏并重新创建您的活动。您需要保存所选选项卡的状态,并在新 Activity 启动时恢复它。

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    // onCreate implementation goes here

    if(savedInstanceState != null) {
        int selectedTabIndex = savedInstanceState.getInt("selectedTabIndex");
        getActionBar().setSelectedNavigationItem(selectedTabIndex);
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);
    outState.putInt("selectedTabIndex", getActionBar().getSelectedNavigationIndex());
}
于 2013-01-30T08:17:21.327 回答
1

您可以使用 onRetainNonConfigurationInstance() 来解决此问题。

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

public Object onRetainNonConfigurationInstance() 
{
   return tabs.getCurrentTab();
}
于 2013-02-20T05:16:29.507 回答
0

当您更改方向时,它将重新加载活动。这就是为什么它提供第一个选项卡的原因。在清单文件中使用 android:configChanges="keyboardHidden|orientation" 如果它不能正常工作,那么去 @Override public void onSaveInstanceState(Bundle savedInstanceState) {}

于 2013-01-30T08:07:58.103 回答