Проблема динамического удаления Tab из TabHost на android1.5

Мои коды такие:

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; 

}

У меня есть 4 вкладки в TabHost: tab1, tab2, tab3, tab4, когда пользователь выйдет из системы, я удалю tab3 и tab4, поэтому я вызываю removeTabForLogout(), очищаю все вкладки в tabHost и повторно добавляю tab1 и tab2.

В android 1.5 и android 1.6, если текущая выбранная вкладка - tab1, когда я вызываю removeTabForLogout, возникает исключение в tabHost.addTab(getTab1()):

ОШИБКА/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. Кто-нибудь может мне помочь? Большое спасибо!


person hkbarton    schedule 23.04.2010    source источник


Ответы (1)


Не видя строк, которые трассировка стека указывает на ваши проблемы, сложно ответить. Однако в ошибках, читаемых в TabHost.java:320 и TabHost.java:210, мне сообщается, что ваш код в классе «actMain» в строке 266 вызывает вашу ошибку. Я бы рассмотрел эту линию.

Кроме того, если вы смотрите на вкладку 1, когда удаляете ее, просто чтобы восстановить ее ... не могли бы вы просто оставить вкладку 1 и вкладку 2 и не создавать их заново сразу после удаления?

person Ben    schedule 26.05.2010