Android TabHost默认选项卡:始终创建第一个添加的选项卡

时间:2015-06-10 06:35:59

标签: android android-tabhost

考虑将初始/默认选项卡设置为第二个选项卡的方案:

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&#39s onCreate,然后在setCurrentTab(1)行运行后调用Activity1< create。 / p>

在源代码中挖掘后,我注意到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。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我确实面临同样的问题,可能最有效的解决方案是create an empty invisible/hidden first tab,其活动消耗的CPU比实际消耗的少。