2011-02-28 45 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 
} 
相关问题