屏幕旋转时标签更改[Android]

M.V*_*.V. 2 tabs android rotation screen-rotation

嗨,我有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();
}
Run Code Online (Sandbox Code Playgroud)

在createView()里面我有:

private void createView()
{
... // Tabs are created before
tabHost.getTabWidget().setCurrentTab(CurrentTab);
}
Run Code Online (Sandbox Code Playgroud)

CurentTab 是private int并且默认设置为0,但它在TabChange上设置:

public void onTabChanged(String tabId) {
    ... some code
    CurrentTab = tabHost.getCurrentTab();
}
Run Code Online (Sandbox Code Playgroud)

我在这里堆积......有没有其他方法可以解决这个问题?

简而言之: 我希望Tab在屏幕旋转时不会更改为默认值...

Flo*_*Flo 7

问题是,在配置更改(如屏幕旋转)上,当前活动被破坏并重新创建.如果是选项卡活动,则包括选项卡活动本身以及每个选项卡的活动.

因此,当它重新创建时,它只显示第一个选项卡,因为它没有其他信息.

要解决此问题,您可以覆盖onRetainNonConfigurationInstance()选项卡活动并返回当前选定的选项卡.在选项卡活动的on onCreate中,然后调用getLastNonConfigurationInstance()它返回您在onRetainNonConfigurationInstance()中返回的对象.如果对象为null,则表示没有方向更改,因此您只需选择第一个选项卡,如果它不为null,则表示屏幕旋转,您可以使用返回的值来确定之前选择的选项卡并设置它再次.