2011-05-21 80 views
0

這應該很簡單,但它不起作用。我想要的是兩個不同的選項卡,它們使用相同的活動類別。我不在乎他們是否共享相同的活動,或者他們各自擁有自己的實例。在此代碼中,我將第二個選項卡設置爲與第一個選項卡相同的活動,但只有第一個選項卡會加載到應用程序中。如果我點擊第二個標籤頁,我會看到一個黑屏:Android兩個具有相同活動的選項卡

//Create tabs 
    Resources res = getResources(); 
    TabHost tabHost = getTabHost(); 
    TabHost.TabSpec spec; 
    Intent intent; 
    String tabTitle = getString(R.string.livevideo); 

    // Initialize intent 
    // Initialize tabspec for each tab and add it to host 
    intent = new Intent().setClass(this, CameraListView.class); 
    spec = tabHost.newTabSpec("live").setIndicator(tabTitle,res.getDrawable(R.drawable.livebtn)).setContent(intent); 
    tabHost.addTab(spec); 

    tabTitle = getString(R.string.videoplayback); 
    intent = new Intent().setClass(this, CameraListView.class); 
    spec = tabHost.newTabSpec("playback").setIndicator(tabTitle,res.getDrawable(R.drawable.playbackbtn)).setContent(intent); 
    tabHost.addTab(spec); 

難道這不就是一件簡單的事嗎?我認爲用相同的活動製作新的意圖會實例化活動的第二個副本,但也許這不是Android的工作方式。

回答

1

嘗試這樣:

TabHost tabHost = getTabHost(); 
TabSpec spec = null; 

tabSpec = tabHost.newTabSpec("tabSpec"); 
tabSpec.setIndicator(someString, someDrawable); 
tabSpec.setContent(new Intent(getApplicationContext(), CameraListView.class)); 
tabHost.addTab(tabSpec); 

tabSpec = tabHost.newTabSpec("tabSpec"); 
tabSpec.setIndicator(someString, someDrawable); 
tabSpec.setContent(new Intent(getApplicationContext(), CameraListView.class)); 
tabHost.addTab(tabSpec); 

//編輯 針對在評論你的問題。我不知道有什麼辦法可以做你想做的事。我有完全相同的問題。最後,我通過創建新的Activity來解決它,它從firstTabActivity繼承而來,並將其放在第二個選項卡中。在你的情況下,我認爲它會很簡單 - SecondTabActivity延伸FirstTabActivity和覆蓋方法onListItemClick()

+0

所以他們在這裏鍵是使用相同的tabspec名稱爲這兩個選項卡。這確實得到了兩個選項卡上的相同的活動,但我需要每個選項卡具有不同的ID。因此,這兩個選項卡共享一個列表視圖,但取決於選項卡類型將決定選擇某個項目時顯示的活動。有關如何在具有相同活動的情況下將選項卡引用爲不同的想法? – spentak 2011-05-21 19:17:04

+0

你好再次:)不,tabSpec不必爲這兩個選項卡具有相同的名稱 - 你可以在我的代碼中看到,我調用兩次tabSpec = tabHost.newTabSpec(「tabSpec」);這意味着第二次初始化後的tabSpec是完全新的實例,而方法newTabSpec(String tag)的參數也不必相同。說實話,我不知道你和我的代碼之間有什麼區別:)查看我編輯的關於你評論第二部分的答案。 – 2011-05-21 21:02:35

0

使用不同的標籤爲每個tabspec這樣;

tabSpec = tabHost.newTabSpec("tabSpec"); 
tabSpec = tabHost.newTabSpec("tabSpec2"); 

希望這會有所幫助。

相關問題