0

我正在尝试在应用程序中实现方向功能。该应用程序基本上由选项卡组成,使用 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

成功登录后,用户很快就会看到 Tab 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 变量为空!我没有保存它的任何状态。我怎么可能保存 tabHost 实例?

在研究其他社区帖子时,我发现了“onRetainNonConfigurationInstance()”。我实现了同样的。

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

但是这个对象返回为空。任何人都可以引导我完成使用 tabHost 处理应用程序方向更改的步骤吗?

问我是否发现任何令人困惑的地方。

提前致谢!

已解决:将 screenSize 添加到清单中的活动标记修复了该问题。

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

1 回答 1

0

您可以添加参数

android:configChanges="orientation"

您在清单中的活动。我认为它可以满足您的需求。它应该看起来像:

<activity
        android:name="com.your.package.YourActivity"
        android:configChanges="orientation"
</activity>
于 2012-12-20T16:38:59.673 回答