Почему вкладка не остается измененной? - PullRequest
0 голосов
/ 28 февраля 2011

В Android у меня есть TabActivity (A), в котором я создаю одну вкладку, называемую загрузкой в ​​Activity B.

Из Activity BI измените TabWidget из TabActivity A, чтобы добавить еще несколько вкладок через статическую ссылкуна TabHost в TabActivity A.

После того, как я запускаю новое действие C и затем нажимаю BACK, у TabWidget есть только одна вкладка с именем Loading.

Я пробовал в методе onResume ActivityB, чтобы воссоздать вкладки, но он больше не работает.

Кто-нибудь знает, почему он это делает и как я могу это исправить?

1 Ответ

0 голосов
/ 28 февраля 2011

Использование статических переменных, указывающих на компоненты пользовательского интерфейса (например, 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
}
...