0

在 android 中,我有一个 TabActivity (A),我在其中创建了一个名为 loading 的单个选项卡,带有 Activity B。

从 Activity BI 修改 TabActivity A 中的 TabWidget,以通过对 TabActivity A 中的 TabHost 的静态引用添加更多选项卡。

在我开始一项新活动 C 然后按 BACK 后,TabWidget 只有一个名为 Loading 的选项卡。

我已经尝试在活动 B 的 onResume 方法中重新创建选项卡,但它不再起作用了。

有谁知道它为什么会这样做,我该如何解决?

4

1 回答 1

0

依赖指向 UI 组件的静态变量(如 a TabHost)会导致内存泄漏。不要这样做。而是在 中注册一个BroadcastReceiverTabActivity添加新选项卡。这样,您无需修改​​静态变量,而是发送广播 ( 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
}
于 2011-02-28T14:40:10.477 回答