TabHost可以在Android中的另一个元素中使用吗?

时间:2010-10-21 20:27:08

标签: android

我正在尝试将标签主机设置为布局的元素。我见过的所有例子都在视图中显示了TabHost。这些示例工作正常,但是当试图使其成为另一个布局的一部分时,它似乎不起作用。我没有找到任何指明这种或那种方式的文档。

这样的工作(并非所有代码都是为了说明目的而显示):

            <TabHost>
                    <LinearLayout>
                        <TabWidget/>
                        <FrameLayout>
                            <TextView
                                android:text="this is a tab" />
                            <TextView
                                android:text="this is another tab" />
                            <TextView
                                android:text="this is a third tab" />
                        </FrameLayout>
                    </LinearLayout>
            </TabHost>

然而,这不起作用:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">

                                                                                                                               

我做错了什么或者这是不可能的?

这是我的onCreate方法:

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);       

    }
}

是否需要设置某些内容?

当我说它不起作用时,我的意思是在模拟器上运行应用程序后,我得到一个弹出窗口:“应用程序xxx(进程com.example)意外停止。请再试一次。”< / strong>

如果我删除标签代码,它会再次起作用。我正在为Android 1.6开发,如果这有所不同。

1 个答案:

答案 0 :(得分:1)

它正在工作!!

感谢你们说它应该可行,我一直在寻找问题,与我自己单独使用TabHost的例子相比。

问题在于我的onCreate()方法。我需要获取标签主机并在那里添加标签,我(出于某种原因)认为它只是在xml中就足够了。

我的onCreate最终看起来像这样:(因为有人和我一样犯了同样的愚蠢错误)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TabHost mTabHost = getTabHost();
    mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("Tab 1").setContent(R.id.textview1));
    mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("Tab 2").setContent(R.id.textview2));
    mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("Tab 3").setContent(R.id.textview3));

    mTabHost.setCurrentTab(0);        

}