Создание активности вкладки Android принудительно?

У меня есть приложение для Android с основным действием, которое является tabhost. Я добавляю несколько вкладок в tabhost с намерением выполнить несколько действий.

Моя проблема в том, что эти действия не создаются (onCreate не вызывается), пока я не нажму на вкладку. Это проблема, потому что мне нужно зарегистрировать широковещательные приемники: могут быть широковещательные рассылки, которые отправляются до открытия определенной вкладки.

Я попытался обойти это:

  • Настройка моих приемников как статических и регистрация откуда-то еще. Это невозможно, потому что мне нужно вызывать методы.
  • Вызов tabHost.setCurrentTabByTag(the_tag) и затем обратное переключение на мою корневую вкладку. Это работает только иногда, и это очень уродливое решение.
  • Не использовать действия, а просто использовать представления. Также не очень элегантное решение, потому что оно превращает мою активность tabHost в один огромный мастер-класс, выполняющий всевозможные несвязанные вещи.

Что было бы лучшим решением этой проблемы? Могу ли я как-то поставить отправленные трансляции в очередь, а не просто исчезать, когда нет получателей? Могу ли я принудительно создать действия с моей вкладкой (это не проблема, мои пользователи почти гарантированно будут использовать каждую вкладку в какой-то момент)? Другие идеи?

редактировать:

Согласно CommonsWare в этом вопросе; Обновить вкладки из активности вкладки в Android TabHost

Возможно, было бы лучше реализовать вкладки как представления вместо действий... Это несколько меняет мой вопрос:

Как разделить разные виды логики в одном и том же действии? Не очень-то жду 30+ методов сверхактивности.


person Daniel Sloof    schedule 03.06.2010    source источник


Ответы (1)


Я бы использовал TabActivity в качестве приемника вещания, а не действия с вкладками. Это дало бы вам более чистый код и больше контроля над тем, как вы обрабатываете трансляции.

person m6tt    schedule 03.06.2010
comment
Но как это что-то решит? У меня все еще остаются неинициализированные действия на вкладках, в которых необходимо вызывать методы при поступлении широковещательных сообщений. - person Daniel Sloof; 03.06.2010
comment
Вы должны пытаться вызывать методы только из текущей активности. Я не думаю, что возможно, чтобы все действия с tabhost были инициализированы и запущены одновременно. Это было бы плохой практикой, так как это привело бы к значительной разрядке аккумулятора и процессора телефона. Если трансляция происходит, когда ваша активность приостановлена ​​или еще не инициализирована, вы можете сохранить ее в своем TabActivity и передать ее соответствующей активности только тогда, когда эта активность возобновится. - person m6tt; 03.06.2010
comment
@disretrospect Не могли бы вы показать пример, как мы можем передать данные из TabActivity в соответствующую дочернюю активность при ее создании / возобновлении? Спасибо - person zeratul021; 30.08.2011