0

我对 onConfigurationChanged 和 TabHost 有疑问。因为我的 Activity 在轮换时重启,所以我发现这篇文章很有帮助: Activity restart on rotation Android

我将 gui 元素排序到函数 InitialGui()

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    InitialGui();
}

覆盖 onConfigurationChanged 并调用 InitialGui()

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

AndroidManifest 内部

    <activity
        android:label="@string/app_name"
        android:name=".MyAndroidAppActivity"
        android:theme="@android:style/Theme.NoTitleBar"
        android:configChanges="keyboardHidden|orientation"
        >

为简单起见,我基于 http://www.mkyong.com/android/android-tablayout-example/创建了一个新项目 ,仅提及了更改。这是顺便说一句 InitialGui 功能

public void InitialGui()
{
    TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
    tabHost.setup();

    // Android tab
    Intent intentAndroid = new Intent().setClass(this, AndroidActivity.class);
    TabSpec tabSpecAndroid = tabHost
      .newTabSpec("Android")
      .setIndicator("Android")
      .setContent(intentAndroid);

    // Apple tab
    Intent intentApple = new Intent().setClass(this, AppleActivity.class);
    TabSpec tabSpecApple = tabHost
      .newTabSpec("Apple")
      .setIndicator("Apple")
      .setContent(intentApple);

    // Windows tab
    Intent intentWindows = new Intent().setClass(this, WindowsActivity.class);
    TabSpec tabSpecWindows = tabHost
      .newTabSpec("Windows")
      .setIndicator("Windows")
      .setContent(intentWindows);

    // Blackberry tab
    Intent intentBerry = new Intent().setClass(this, BlackBerryActivity.class);
    TabSpec tabSpecBerry = tabHost
      .newTabSpec("Berry")
      .setIndicator("Berry")
      .setContent(intentBerry);

    // add all tabs 
    tabHost.addTab(tabSpecAndroid);
    tabHost.addTab(tabSpecApple);
    tabHost.addTab(tabSpecWindows);
    tabHost.addTab(tabSpecBerry);

    //set Windows tab as default (zero based)
    tabHost.setCurrentTab(2);
}

我的问题是旋转后的空 TabHosts,不管点击 Tab 什么都不会显示。有什么提示吗?谢谢

4

1 回答 1

0

我想复杂了,没必要 setContentView(R.layout.myLayout); 或者是其他东西。只需通过覆盖 onConfigurationChanged 来阻止调用 onCreate 方法。

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
}

这对我有用。

于 2012-08-29T11:43:35.980 回答