我有一個應用程序可以動態地創建選項卡。當我創建一個標籤頁時,我開始一個活動作爲一個意圖。像這樣:從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