我创建了一个简单的 TabActivity,它在运行时构建选项卡,读取一些 JSON 数据。目前,我正在为每个选项卡初始化一个带有虚拟随机项的空 ListActivity,只是为了查看从选项卡到选项卡的更改是有效的,并且内容不会消失。选项卡的实际内容存储在单例类中,因此当由于屏幕方向更改而重新创建选项卡活动时,它们只需根据意图的附加包中包含的标识符从相应列表中提取正确的虚拟项目.
一切正常。我已经在列表活动 onCreate 方法上记录了一个日志,以观察活动在屏幕旋转时重新创建,并且确实如此。然而,有些奇怪的是第一个选项卡的活动总是重新创建,即使它不可见。当我切换到第三个或第四个选项卡并旋转设备时,除了第一个选项卡外,之前的选项卡会被杀死并且不会再次重新创建。第一个选项卡始终存在。为什么?我会理解代码中的错误,但选项卡活动是从教程中复制的,并且所有选项卡的列表活动都是相同的。这是我得到的一些日志:
List created with 1
onConfigurationChanged
List created with 1
List created with 2
List created with 4
List created with 5
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
List created with 4
onConfigurationChanged
List created with 1
List created with 4
onConfigurationChanged
List created with 1
List created with 4
List created with 5
onConfigurationChanged
List created with 1
List created with 5
onConfigurationChanged
List created with 1
List created with 5
正如您从日志中看到的那样,每个列表活动都会记录放在附加包中的标识符,并且几乎没有做任何其他事情。因此应用程序启动并创建了第一个选项卡,然后我旋转并切换到其他选项卡。他们的 onCreate 方法被调用。然后日志显示我如何切换标签和旋转。根据可见的选项卡重新创建不同的活动,但第一个活动始终存在!
为什么总是重新创建第一个选项卡?出于某种原因需要这种特殊行为吗?我在 HTC Legend API 级别 7 上看到了这一点。
更新:我在 TabActivity 的循环中添加了更多日志,创建了各个选项卡,看起来当添加第一个选项卡时,它的活动总是被创建。有没有办法避免这种情况?也许创建虚拟的空选项卡,然后用真实的活动填充它们?更多日志:
onConfigurationChanged
Tab: Saving tab index 3
...
Tab: Adding tab 1
List created with 1
Tab: Adding tab 2
Tab: Adding tab 3
Tab: Adding tab 4
Tab: Adding tab 5
Tab: Setting tab to index 3
List created with 5