无法在方向更改时获取tabHost对象

时间:2012-12-20 16:35:28

标签: android android-tabhost android-orientation android-tabs android-tabactivity

我正在尝试在应用中实现定位功能。该应用程序基本上由制表符组成,使用TabHost。每个选项卡都是一个活动组,其中包含一些活动。每个子活动都使用AsyncTask运行后台任务,以提取服务器数据并呈现UI。

例如,

HomeActivity- tab activity class that creates all the tabs
UserActivity- an activity group class representing a tab (say Tab 1)
TabOne- child activity inside UserActivity group

用户在成功登录后立即看到标签1。当我尝试为此选项卡设置方向功能时,问题就开始了。在活动(TabOne)中,我添加了以下内容

@Override
public void onSaveInstanceState(Bundle outState) {
  System.out.println("saving state..!");
  outState.putStringArray("imageUrls", imageArray);
  super.onSaveInstanceState(outState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  System.out.println("restoring state..!");
  imageArray = savedInstanceState.getStringArray("imageUrls");
  super.onRestoreInstanceState(savedInstanceState);

}

我能够获得'imageUrls'状态。但是,稍后,我无法访问静态选项卡主变量。

 HomeActivity.tabHost.getTabWidget().getChildAt(1)

tabHost变量为null!我没有保存任何州。我怎么可能保存tabHost实例?

在研究其他社区帖子时,我找到了'onRetainNonConfigurationInstance()'。我实现了相同的。

 public Object onRetainNonConfigurationInstance() {
   System.out.println("retaining state..!");
   return HomeActivity.tabHost;
 }

将此对象作为null返回。任何人都可以指导我使用tabHost处理应用中的方向更改吗?

问我是否发现任何令人困惑的事情。

提前致谢!

已解决:将清单中的screenSize添加到活动标签可以解决问题。

<activity android:name=".HomeActivity"
          android:configChanges="orientation|screenSize"/>

1 个答案:

答案 0 :(得分:0)

您可以添加参数

android:configChanges="orientation"

清单中的活动。我认为它做你想要的。它应该看起来像:

<activity
        android:name="com.your.package.YourActivity"
        android:configChanges="orientation"
</activity>