2010-10-21 56 views
3

我試圖設置一個標籤主機作爲佈局的一個元素。我所看到的所有例子都在視圖中顯示了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

回答

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);   

} 
相關問題