开发者

Why doesn't the tabwidget remain modified?

In android I have an TabActivity (A) in which I create a single tab called loading with the Activity B.

From Activity B I modify the TabWidget from TabActivity A to add some more tabs via a static reference to the TabHost in TabActivity A.

After I start a new activity C and then press BACK the TabWidget has only one single tab called Loading.

I've tried in the onResume method of Activity B to r开发者_C百科ecreate the tabs but it doesn't work anymore.

Does anyone know why does it do this and how can I fix it?


Relying on static variables pointing to UI components (like a TabHost) can lead to produce memory leaks. Don't do it. Instead register a BroadcastReceiver in the TabActivity to add new tabs. That way, instead of modifying a static variable, you send a broadcast (Context#sendBroadcast(Intent)) to tell the tab activity that you want a new tab.

Also, make sure you save the state of the TabActivity, so that you can restore it if the Android OS destroys your activity for some reason. I recommend using the onRetainNonConfigurationInstance... something like this:

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
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜