Я создал простой 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 level 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