0

私のコードは次のようになります:

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 には、tab1、tab2、tab3、tab4 の 4 つのタブがあります。ユーザーがログアウトすると、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 で有用な情報が見つかりません。誰でも私を助けることができますか?どうもありがとう!

4

1 に答える 1

0

スタックトレースが問題として引用している行を見ないと、答えるのは困難です。TabHost.java:320 & TabHost.java:210 で読み取ったエラーでは、266 行目の Class "actMain" のコードがエラーの原因であることがわかります。私はその行を見直すことを検討します。

また、削除したときにタブ 1 を見ている場合は、元に戻すためだけに... タブ 1 とタブ 2 を残して、削除した直後にそれらを再作成することはできませんか?

于 2010-05-26T19:25:05.643 に答える