为什么tabwidget不会被修改?

时间:2011-02-28 14:31:29

标签: android android-tabhost revert

在android中我有一个TabActivity(A),我在其中创建了一个名为load with Activity B的标签。

从活动B我修改TabActivity A中的TabWidget,通过静态引用向TabActivity A中的TabHost添加更多选项卡。

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

我已尝试使用Activity B的onResume方法重新创建标签,但它不再起作用了。

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

1 个答案:

答案 0 :(得分:0)

依赖于指向UI组件的静态变量(如TabHost)可能会导致内存泄漏。不要这样做。而是在BroadcastReceiver中注册TabActivity以添加新标签。这样,您可以发送广播(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
}