私のコードは次のようになります:
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 で有用な情報が見つかりません。誰でも私を助けることができますか?どうもありがとう!