0

Androidには、アクティビティBを使用してロードと呼ばれる単一のタブを作成するTabActivity(A)があります。

アクティビティBIから、TabActivity AのTabWidgetを変更して、TabActivityAのTabHostへの静的参照を介してさらにいくつかのタブを追加します。

新しいアクティビティCを開始し、[戻る]を押した後、TabWidgetにはLoadingというタブが1つだけあります。

アクティビティBのonResumeメソッドでタブを再作成しようとしましたが、機能しなくなりました。

なぜそれがこれを行うのか、そしてどうすればそれを修正できるのか誰かが知っていますか?

4

1 に答える 1

0

UI コンポーネント ( などTabHost) を指す静的変数に依存すると、メモリ リークが発生する可能性があります。やらないでください。代わりに に a を登録しBroadcastReceiverて、TabActivity新しいタブを追加します。この方法では、静的変数を変更する代わりに、ブロードキャスト ( ) を送信してContext#sendBroadcast(Intent)、新しいタブが必要であることをタブ アクティビティに伝えます。

TabActivityまた、何らかの理由で Android OS によってアクティビティが破棄された場合に復元できるように、の状態を必ず保存してください。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 に答える