gpt4 book ai didi

android - 从 TabHost 中删除选项卡及其内部的 Activity ( Intent )

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:23 24 4
gpt4 key购买 nike

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

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);
}

相当标准。而且效果很好。现在,假设我在选项卡内实例化的 Activity 中有一个按钮(或菜单项等)。当用户按下此按钮时,我希望删除并销毁该 Activity 及其所在的选项卡。

我似乎找不到一个简单的方法来做到这一点。我找到了 TabHost.clearAllTabs() 函数,但这会破坏所有选项卡和 Activity ,我只想删除一个。

有人建议我保存我打开的所有选项卡的列表,然后调用 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 中删除我的选项卡,删除所有选项卡,然后使用我的 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)

由于某种原因,在添加标签时,它会尝试设置当前标签,但会遇到空指针异常。

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

最佳答案

尝试将当前标签更改为 0。

类似于:

getTabHost().setCurrentTab(0);
getTabHost().clearAllTabs();

我读到调用 clearAllTabs(); 将抛出一个 nullpointerexception 如果你没有将 tabhost 设置为第一个选项卡 (.setCurrentTab(0 )) 在调用 (.clearAllTabs())

之前

这个答案也有帮助吗? ( How to remove tab from TabHost )

关于android - 从 TabHost 中删除选项卡及其内部的 Activity ( Intent ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com