我有一个应用程序可以动态地创建选项卡。当我创建一个标签页时,我开始一个活动作为一个意图。像这样:从TabHost中删除选项卡和其中的活动(意图)
private void addTab(Context packageContext, Class<?> newClass, TabHost mTabHost, String tabId, String tabLabel){
// newClass is my Activity class that I want to start in the tab
Intent intent = new Intent().setClass(packageContext, newClass);
TabHost.TabSpec spec;
spec = mTabHost.newTabSpec(tabId).setIndicator(tabLabel)
.setContent(intent);
mTabHost.addTab(spec);
mTabHost.setCurrentTabByTag(tabId);
}
漂亮的标准。它效果很好。现在,假设我在我的选项卡中实例化的活动中有一个按钮(或menuitem,无论)。当用户按下此按钮时,我想要将该活动及其内部的选项卡移除并销毁。
我似乎无法找到一个简单的方法来做到这一点。我找到了TabHost.clearAllTabs()函数,但是这破坏了所有的选项卡和活动,我只想删除它。
有人建议我保存已打开的所有选项卡的列表,然后调用clearAllTabs(),之后重新创建除我不想要的选项卡之外的所有其他选项卡。
事情是这样的:
public static ArrayList<TabHost.TabSpec> list = new ArrayList<TabHost.TabSpec>();
我此行添加到我的addTab()函数,以便每次我创建标签是记得我的ArrayList:
list.add(spec);
,然后当我想删除我的标签我运行此功能:
public static void removeTab(){
list.remove(list.size()-1); // remove it from memory
mTabHost.clearAllTabs(); // clear all tabs from the tabhost
for(TabHost.TabSpec spec : list) // add all that you remember back
mTabHost.addTab(spec);
}
这将从我的ArrayList中删除我的选项卡,删除所有选项卡,t母鸡使用我的ArrayList重新创建剩余的所有选项卡。从理论上讲它应该工作,但我得到以下错误,当我尝试调用此函数:
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.widget.TabWidget.setCurrentTab(TabWidget.java:342)
at android.widget.TabWidget.focusCurrentTab(TabWidget.java:366)
at android.widget.TabHost.setCurrentTab(TabHost.java:323)
at android.widget.TabHost.addTab(TabHost.java:216)
at com.example.myapp.TabManager.removeTab(QuikBrowser.java:86)
at com.example.myapp.TabManager.TabWindow.onOptionsItemSelected(TabWindow.java:91)
at android.app.Activity.onMenuItemSelected(Activity.java:2205)
出于某种原因,添加标签时,它会尝试设置当前选项卡,它击中一个空指针异常。
如果你们可以提出另一种方法来实现我想要做的事情,或者解决我目前的方法,我将不胜感激。
谢谢!这是问题。 – Pete 2011-05-28 23:58:19
ahh很好听:)在我目前的应用程序中,我正在处理很多标签,所以这对我来说也可以派上用场,这对我来说也是很有用的。 – wired00 2011-05-29 00:25:34
thanks wired00,对我也有帮助。 – efeyc 2011-09-13 13:43:32