2015-06-10 3 views
1

Рассмотрим сценарий установки начальной вкладки/по умолчанию на второй вкладке:Android TabHost По умолчанию Tab: Первая вкладка Добавлено всегда создается

TabHost _tabHost = getTabHost(); 
Intent intent0 = new Intent(this, Activity0.class); 
Intent intent1 = new Intent(this, Activity1.class); 
TabHost.TabSpec spec0 = _tabHost.newTabSpec("0").setIndicator(_vw0).setContent(intent0); 
TabHost.TabSpec spec1 = _tabHost.newTabSpec("1").setIndicator(_vw1).setContent(intent1); 
_tabHost.addTab(tabSpec0); 
_tabHost.addTab(tabSpec1); 

_tabHost.setCurrentTab(1); 

Все ресурсы в Интернете показывают, что установка закладку по умолчанию осуществляется вызовом setCurrentTab (1) - однако выше код на самом деле вызовет ActivityO onCreate сначала, затем начнется строка Activity1 после строки setCurrentTab (1).

После копаться в источнике я заметил addTab TabHost в() метод вызывает setCurrentTab (0) само по себе в первый раз его называют:

public void addTab(TabSpec tabSpec) { 
     ... 
     ... 
     ... 

     if (mCurrentTab == -1) { 
      setCurrentTab(0); <-- THIS will start first added Activity NO MATTER WHAT 
     } 
    } 

Это, безусловно, проблема, если вы хотите, чтобы начать свое приложение с 2 по умолчанию. Я не хочу загружать 2 действия, когда мне нужно только 1.

Я подумывал написать собственный метод addTab, но реализация зависит от ряда частных членов (большинство из них защищены, но некоторые из них являются частными).

У моей Activity0 есть тяжелая логика в onCreate, поэтому я не хочу запускать это без необходимости и просто начинаю с Acivity1 по умолчанию.

Любые идеи?

+0

Возможно, вам не нужно устанавливать метод setContent (намерение) до тех пор, пока пользователь не нажмет на вкладку, а затем проверьте, существует ли контент для «setContent (намерение) или нет). В любом случае, я всегда использую фрагменты для вкладок, а не действия. Зачем нужно начинать с табуляции 2, заменяя порядок табуляции, исправляя это, и из вашей короткой информации кажется лучшим подходом. – Sulfkain

+0

Спасибо, я чувствую, что это сработает. Можете ли вы предоставить пример быстрого кода? – AlexVPerl

+0

Если вы можете изменить заказ на вкладке, которая не нуждается в каком-либо коде, я предпочитаю этот подход до сих пор. – Sulfkain

ответ

1

Я столкнулся с одной и той же проблемой, и, возможно, самым эффективным решением является create an empty invisible/hidden first tab, чья деятельность занимает меньше процессора, чем ваш реальный.

+0

Это отличное предложение, которое дало мне еще одну идею. Я также могу установить глобальный флаг при первой загрузке для обхода логики нагрузки нагрузки. благодаря – AlexVPerl

Смежные вопросы