从android1.5上的TabHost问题动态删除Tab

时间:2010-04-23 08:14:39

标签: android layout android-tabhost

我的代码是这样的:

public void removeTabForLogout(){

  if (tabHost.getTabWidget().getChildCount()==4){ 

      tabHost.setCurrentTab(0); 
      tabHost.clearAllTabs(); 
      tabHost.addTab(getTab1()); 
      tabHost.addTab(getTab2()); 
   }

}

私人TabSpec getTab1(){

    if (mTab1==null){ 
        mTab1= tabHost.newTabSpec("tab1") 
            .setIndicator(...).setContent(intentForTab1); 
    } 
    return mTab1; 

}

私人TabSpec getTab2(){

    if (mTab1==null){ 
    mTab1= tabHost.newTabSpec("tab2") 
        .setIndicator(...).setContent(intentForTab2); 
    } 
    return mTab2; 

}

我在TabHost中有4个标签:tab1,tab2,tab3,tab4,当用户注销时我将删除tab3和tab4,所以我调用removeTabForLogout(),清除tabHost中的所有标签并重新添加tab1和tab2。

在android 1.5和android 1.6中,如果当我调用removeTabForLogout时当前选中的选项卡是tab1,则tabHost.addTab(getTab1())会抛出异常:

ERROR / AndroidRuntime(205):java.lang.IllegalStateException:查看com.android.internal.policy.impl.PhoneWindow$DecorView@437aba18已添加到窗口管理器中。

在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:125)

........

在android.widget.TabHost.setCurrentTab(TabHost.java:320)

在android.widget.TabHost.addTab(TabHost.java:210)

at aitao.mobile.android.actMain.removeTabForLogout(actMain.java:266)

但是removeTabForLogout()在android 2.0及更高版本中运行良好。

我在Google上找不到任何有用的信息。有人可以帮助我吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

如果没有看到堆栈跟踪引用的行作为您的问题,则很难回答。在TabHost.java阅读错误:320& TabHost.java:210然而它告诉我你的代码在第266行的类“actMain”中你的代码导致你的错误。我会考虑回顾这一行。

此外,如果你在删除它时看着标签1,只是为了恢复它...你不能只留下标签1和标签2而不是在删除后立即重新创建它们吗?