Динамическое удаление Tab из TabHost проблемы на Android1,5 - PullRequest
0 голосов
/ 23 апреля 2010

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

public void removeTabForLogout () {

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

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

}

private TabSpec getTab1 () {

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

}

private 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 ()) выдается исключение:

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)

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

Но removeTabForLogout () работает нормально в Android 2.0 и более поздних версияхверсия.

Я не могу найти какую-либо полезную информацию в Google.Кто-нибудь может мне помочь?Большое спасибо!

1 Ответ

0 голосов
/ 26 мая 2010

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

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

...