2012-06-05 5 views
3

조각을 사용하여 타블렛에 최적화 된 응용 프로그램을 만들고 있습니다. 화면의 나머지 부분을 차지하는 두 개의 ViewGroup 컨테이너에 어떤 조각이로드 될지를 제어하는 ​​버튼이있는 왼쪽 탐색 메뉴가 있습니다.방향 변경시 조각을 메모리에 유지하는 방법

예를 들어 탐색 조각의 버튼을 누르면 첫 번째 컨테이너에 항목 목록 조각 (예 : 설정, 고객 등)이로드되고 두 번째 컨테이너에는 항목 세부 정보를 표시하는 조각이로드됩니다 .

메모리에서 조각을 유지하려고하므로 (설정에서 고객으로 이동 한 다음 설정으로 돌아갈 때 이전 설정 조각이 있어야 사용자가 원래 위치를 잃지 않습니다) - I

SettingsListFragment settingsListFragment; 
SettingsDetailFragment settingsDetailFragment; 
CustomerListFragment customerListFragment; 
CustomerDetailFragment customerDetailFragment; 

필자는 필 요할 때 이러한 조각을 만들고 필요에 따라 조각을 바꿉니다. 예.

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
if(settingsListFragment == null){ 
    settingsListFragment = new SettingsListFragment(); 
}   

fragmentTransaction.replace(R.id.fragment_container_left, settingsListFragment); 
fragmentTransaction.commit(); 

제 질문은 방향 변경에 따라 이러한 인스턴스를 어떻게 유지할 수 있습니까?

나는, ... 이것은 당신이보기를 통과해서는 안 의미) "당신이 onRetainNonConfigurationChange (통과 물체에 매우주의 때문에 나는 http://developer.android.com/resources/articles/faster-screen-orientation-change.html에 따라 활동 onRetainNonConfigurationInstance() 메소드를 사용하지 말아야 겠지 드로어 블 Drawable, 어댑터 등 "

는 또한, 조각 관리자에서 Fragment clf = fragmentManager.findFragmentByTag("CLIENT LIST"); 을 조각을 얻기 위해 시도했지만이 널 (null)로 돌아옵니다. 프래그먼트가 대체 된 후에 릴리즈되는 것 같습니다.

도움/조언을 보내 주셔서 감사합니다.

답변

3

그런 방법으로 조각을 유지할 수 없습니다 (또는 실제로해서는 안됨). 나는 당신이 지키고 자하는 상태를 추측하고 있습니다.

당신이 onSaveInstanceState()에 상태를 저장하면 나중에 onCreate() 또는 onActivityCreate()에서 그것을 가져 오지 수 있습니다. 따라서 다시 돌아온 후에는 (다시 스택에 FragmentTransaction을 추가해야합니다) 저장 한 번들에서 상태를 복원 할 수 있습니다!

FragmentManager은 구성 변경 사항을 처리하고 현재보기에서 조각을 복원합니다.

3

안드로이드가 개체를 다시 그리도록하는 것이 좋습니다. 오리 엔테이션 변경에 대한 데이터를 유지하려면 서비스 구성 요소에 유지해야합니다. 이렇게하면 방향 변경시 데이터가 손실되지 않습니다.

그렇지 않으면 당신은 항상이 작업을 수행 할 수 있습니다 : 당신의

<activity android:configChanges="orientation|keyboardHidden"></activity> 

매니페스트 넣어에서

이 활동 클래스 thisin이를 넣어

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
super.onConfigurationChanged(newConfig); 
} 

활동이 다시 그려되지 않습니다이 방법을 사용하여, 가로 또는 세로 방향으로 별도의 XML 레이아웃 파일을 사용하는 경우 레이아웃이 조정되지 않습니다.

1

또 다른 한가지는 FragmentManager#putFragmentFragmentManager#getFragment으로 저장된 단편 참조를 검색 할 수 있습니다.

관련 문제