Почему первая вкладка активности в Android живет вечно?

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

Как вы можете видеть из журналов, каждое действие списка регистрирует идентификатор, помещенный в пакет extras, и больше ничего не делает. Итак, приложение запускается и создается первая вкладка, затем я поворачиваюсь и переключаюсь на другие вкладки. Их метод 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

2 ответа

Решение

После добавления еще нескольких журналов в методы жизненного цикла действия я обнаружил, что методы onCreate() и onStart() всегда создаются для первой вкладки, но метод onResume() вызывается только для видимой вкладки. Поэтому я добавлю свой ленивый код инициализации в метод onResume(), чтобы избежать первого срыва активности приложения.

Возможно, TabActivity работает внутренне аналогично http://developer.android.com/reference/android/widget/ViewFlipper.html и именно поэтому первая вкладка создается всегда, несмотря на то, что она не видна.

Попробуйте изменить начальную вкладку на 2..n и посмотрите, будет ли она создана. Бьюсь об заклад, это как-то связано с тем, как Android обрабатывает TabActivity. Если это так, то вы можете проверить, на какой вкладке вы находитесь!= Null и использовать ее в качестве первой вкладки или по умолчанию 1, если null.

Другие вопросы по тегам