在android中我有一个TabActivity(A),我在其中创建了一个名为load with Activity B的标签。
从活动B我修改TabActivity A中的TabWidget,通过静态引用向TabActivity A中的TabHost添加更多选项卡。
在我开始一个新的活动C然后按BACK后,TabWidget只有一个名为Loading的标签。
我已尝试使用Activity B的onResume方法重新创建标签,但它不再起作用了。
有谁知道为什么会这样做,我该如何解决?
答案 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
}