【问题标题】:Dynamic remove Tab from TabHost problem on android1.5android1.5上从TabHost问题中动态移除Tab
【发布时间】:2011-02-11 10:19:47
【问题描述】:

我的代码是这样的:

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: View 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)

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

但 removeTabForLogout() 在 android 2.0 及更高版本中工作正常。

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

【问题讨论】:

    标签: android layout android-tabhost


    【解决方案1】:

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

    此外,如果您在删除 Tab 1 时查看它,只是为了恢复它...您不能只保留 Tab 1 和 Tab 2 而不在删除后立即重新创建它们吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-20
      • 2011-06-21
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      相关资源
      最近更新 更多