Android 从TabHost中删除选项卡及其内部的活动(意图)

Android 从TabHost中删除选项卡及其内部的活动(意图),android,android-tabhost,Android,Android 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 i

我有一个可以动态创建选项卡的应用程序。当我创建一个选项卡时,我会启动一个活动作为一个意图。像这样:

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);
}
然后,当我想删除我的选项卡时,我运行此功能:

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);
}
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)
这将从我的ArrayList中删除我的选项卡,删除所有选项卡,然后使用我的ArrayList重新创建剩余的所有选项卡。理论上,它应该可以工作,但当我尝试调用此函数时,会出现以下错误:

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);
}
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)
出于某种原因,在添加选项卡时,它会尝试设置当前选项卡,并遇到空指针异常


如果你们能提出另一种方法来实现我想做的事情,或者一种修复我当前方法的方法,我将不胜感激。

我会建议一种不同的方法。您可以使用ActivityGroup构建自己的TabControl。当您使用普通按钮(或类似控件)时,您可以根据需要轻松地排列/创建/删除它们

我不能在这里转储整个代码,但这基本上就是我遇到相同问题时所做的:

  • 创建从ActivityGroup继承的活动
  • 在要显示子活动的布局中放置视图组
  • 根据需要设置按钮(LinearLayout适用于按钮数量可变的情况)
  • 根据需要,通过getLocalActivityManager()启动活动。startActivity()
现在,您可以根据需要添加/删除按钮。这些活动遵循Android的生命周期,因此您不必自己删除它们


您可能必须在ActivityGroup上实现onBackPressed以正确处理历史记录,但这取决于项目。

尝试将当前选项卡更改为0

比如:

getTabHost().setCurrentTab(0);
getTabHost().clearAllTabs();
我正在读调用
clearAllTabs().clearAllTabs()
)之前未将tabhost设置为第一个选项卡(
.setCurrentTab(0)
),则code>将抛出一个
nullpointerexception


这个答案也有帮助吗?()

ahh很高兴听到:)我在当前的应用程序中处理了很多选项卡,因此这在将来对我也很有用很高兴知道工作让我们假设如果创建的选项卡充满了数据,并假设删除了任何选项卡,那么充满数据的选项卡将是空的,因为所有选项卡都已再次创建。