Removendo uma guia e a atividade (intenção) dentro dela de um TabHost
Tenho um aplicativo que pode criar guias dinamicamente. E quando crio uma guia, inicio uma atividade como uma intenção. Igual a
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);
}
Pretty standard. E funciona muito bem. Agora, suponha que eu tenha um botão (ou menu, seja qual for) na atividade que instanciei dentro da minha guia. Quando o usuário pressiona esse botão, desejo que a atividade e a guia dentro dela sejam removidas e destruída
Não consigo encontrar uma maneira simples de fazer isso. Encontrei a função TabHost.clearAllTabs (), mas isso destrói todas as guias e atividades, só quero remover um
lguém sugeriu que eu salve uma lista de todas as guias que abri e depois chamei clearAllTabs (), depois da qual recriar todas as minhas outras guias, exceto a que eu não quer
Algo assim
public static ArrayList<TabHost.TabSpec> list = new ArrayList<TabHost.TabSpec>();
Eu adiciono esta linha à minha função addTab () para que todas as guias que eu crie sejam lembradas na minha ArrayList:
list.add(spec);
E então, quando quero remover minha guia, executo esta função:
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);
}
Isto remove minha guia da minha ArrayList, remove todas as guias e recria todas as guias restantes usando o meu ArrayList. Em teoria, ele deve funcionar, mas recebo o seguinte erro ao tentar chamar esta função:
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)
or algum motivo, ao adicionar uma guia, ele tenta definir a guia atual e atinge uma exceção de ponteiro nul
Se vocês puderem sugerir outra maneira de alcançar o que eu quero fazer ou uma maneira de corrigir meu método atual, eu apreciari