Android TabHost 默认选项卡:始终创建第一个添加的选项卡
Android TabHost Default Tab: First Added Tab Is Always Created
考虑将初始/默认选项卡设置为第二个选项卡的场景:
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) 完成的 - 然而上面的代码实际上会先调用 Activity0 的 onCreate,然后在 setCurrentTab(1) 行 运行s 之后调用 Activity1 的 onCreate。
在深入研究源代码后,我注意到 TabHost 的 addTab() 方法在第一次调用时自行调用了 setCurrentTab(0):
public void addTab(TabSpec tabSpec) {
...
...
...
if (mCurrentTab == -1) {
setCurrentTab(0); <-- THIS will start first added Activity NO MATTER WHAT
}
}
如果您想在默认情况下使用第二个选项卡启动您的应用程序,这显然是一个问题。当我只需要 1 个活动时,我不想加载 2 个活动。
我正在考虑编写自己的 addTab 方法,但实现依赖于许多私有成员(大多数是受保护的,但少数是私有的)。
我的 Activity0 在其 onCreate 上有一些繁重的逻辑,所以我不想 运行 不必要地这样做,而是默认在 Acivity1 上启动。
有什么想法吗?
我确实遇到了同样的问题,可能最有效的解决方案是 create an empty invisible/hidden first tab,其 activity 消耗的 CPU 比您的真实
少。
考虑将初始/默认选项卡设置为第二个选项卡的场景:
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) 完成的 - 然而上面的代码实际上会先调用 Activity0 的 onCreate,然后在 setCurrentTab(1) 行 运行s 之后调用 Activity1 的 onCreate。
在深入研究源代码后,我注意到 TabHost 的 addTab() 方法在第一次调用时自行调用了 setCurrentTab(0):
public void addTab(TabSpec tabSpec) {
...
...
...
if (mCurrentTab == -1) {
setCurrentTab(0); <-- THIS will start first added Activity NO MATTER WHAT
}
}
如果您想在默认情况下使用第二个选项卡启动您的应用程序,这显然是一个问题。当我只需要 1 个活动时,我不想加载 2 个活动。
我正在考虑编写自己的 addTab 方法,但实现依赖于许多私有成员(大多数是受保护的,但少数是私有的)。
我的 Activity0 在其 onCreate 上有一些繁重的逻辑,所以我不想 运行 不必要地这样做,而是默认在 Acivity1 上启动。
有什么想法吗?
我确实遇到了同样的问题,可能最有效的解决方案是 create an empty invisible/hidden first tab,其 activity 消耗的 CPU 比您的真实
少。