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

问题描述:

我试图设置一个标签主机作为布局的一个元素。我所看到的所有例子都在视图中显示了TabHost本身。这些例子工作正常,但当试图使它成为另一个布局的一部分时,它似乎不起作用。我还没有找到任何指定这种或那种方式的文件。在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(process com.example)意外停止,请重试。

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

+2

向我们展示你的onCreate()。这工作正常 – Falmarri 2010-10-21 20:50:49

+1

同意,它绝对有作为一个其他元素的孩子TabHost。你没有解释它是如何“不起作用”的。 – CommonsWare 2010-10-21 22:57:34

它的工作!

感谢你们说这是应该工作我一直在寻找问题比较,我有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);   

}