2011-05-21 46 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"); 

希望这会有所帮助。

相关问题