我有一个应用程序,我使用Tab Host在一个屏幕上保存多个活动。这就是我向Tab Host添加标签的方式。
TabHost tabHost = getTabHost();
TabSpec tab1 = tabHost.newTabSpec("Tab1");
View view = getLayoutInflater().inflate(R.layout.tab_indicator, myLayout, false);
tab1.setIndicator(view);
tab1.setContent(new Intent(getApplicationContext(), MyClass1.class));
tabHost.addTab(tab1);
在我的指标自定义视图中,有一个关闭按钮,可以关闭该选项卡以及与之关联的活动。以下是在选项卡上单击关闭按钮时,我从Tab-Widget中成功删除视图的方法。
tabHost.getTabWidget().removeViewAt(index_of_tab);
此代码删除了该选项卡,但它不会删除在FrameLayout(tabcontent)中启动的活动,并且当打开具有不同Acvitiy的不同选项卡时,它会再次显示此活动。
例如,我打开一个活动 MyClass1 的标签并关闭它。我再次打开一个活动 MyClass2 的新标签页,但旧的活动 MyClass1 再次出现,而不是 MyClass2 。
我做错了吗?如果错误,关闭选项卡以及与之关联的活动的正确方法是什么?
请帮助。感谢。
答案 0 :(得分:2)
我必须在我的一个项目中使用TabHost
,就关闭选项卡而言,我放弃并以粗暴的方式执行,因为似乎TabHost
有点棘手关闭标签时。
所以我最终调用了.clearAllTabs()
并恢复了我想要保留的标签。当你意识到一旦你设置了TabHost.TabSpec
对象,你无法检索它,在选项卡或类似物上没有任何getTabSpec()
方法,那么整个事情就更糟了,所以我终于宣布了一个ArrayMap<String, TabHost.TabSpec>
每次添加标签时,我都会将其保存在该地图中。
这种方式每当我必须在clearAllTabs()
上拨打TabHost
时,我只需要遍历地图并在.addTab()
的每个标签上调用TabHost.TabSpec
{{1}} {{1}} 1}}作为参数(当然,也删除我要从地图中清除的那个)。