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