2011-02-28 1 views
0

안드로이드에서 나는 Activity B 로딩이라는 단일 탭을 만드는 TabActivity (A)를 가지고있다.tabwidget이 수정되지 않은 이유는 무엇입니까?

Activity BI에서 TabActivity A의 TabWidget을 수정하여 TabHost에 대한 정적 참조를 통해 더 많은 탭을 추가한다. TabActivity A.

새 활동 C를 시작한 다음 BACK을 누르면 TabWidget에 Loading이라는 단일 탭이 하나만 있습니다.

탭을 다시 만들려면 활동 B의 onResume 메서드에서 시도했지만 더 이상 작동하지 않습니다.

왜이 작업을 수행하고 어떻게 해결할 수 있습니까?

답변

0

UI 구성 요소를 가리키는 정적 변수 (예 : TabHost)를 사용하면 메모리 누수가 발생할 수 있습니다. 하지 마. 대신 새 탭을 추가하려면 TabActivityBroadcastReceiver을 등록하십시오. 그런 식으로 정적 변수를 수정하는 대신 브로드 캐스트 (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 
}