2011-02-28 78 views
0

在機器人我有一個TabActivity(A),其中創建稱爲裝載與活動B.爲什麼tabwidget不被修改?

從活動BI單個片從TabActivity甲修改TabWidget通過靜態參考TabHost添加一些更多的標籤在TabActivity A.

當我開始一個新的活動C,然後按下後,TabWidget只有一個名爲Loading的選項卡。

我已經嘗試在Activity B的onResume方法來重新創建標籤,但它不再工作。

有誰知道它爲什麼這樣做,我該如何解決它?

回答

0

依靠指向UI組件的靜態變量(如TabHost)可能導致產生內存泄漏。不要這樣做。而是在TabActivity中註冊BroadcastReceiver以添加新選項卡。這樣,您不需要修改靜態變量,而是通過發送廣播(Context#sendBroadcast(Intent))來告訴選項卡活動您需要一個新選項卡。

另外,請確保您保存TabActivity的狀態,以便在Android操作系統因某種原因破壞您的活動時恢復它。我推薦使用onRetainNonConfigurationInstance ...這樣的事情:

private State mState; 
public void onCreate(Bundle b){ 
    // somewhere in onCreate 
    mState = (State) getLastNonConfigurationInstance(); 
    if(mState == null){ 
     mState = new State(); 
    } else { 
     for(TabSpec tab : mState.tabs){ 
      //add them to the tab host 
     } 
    } 
} 
@Override 
public Object onRetainNonConfigurationInstance() { 
    return mState; 
} 

private static class State{ 
    List<TabSpec> tabs; 
    // more stuff that you want to save 
} 
相關問題