2

구성 변경 (회전 등)시 Activity가 다시 생성되면 FragmentTransaction의 hide()가 지속되지 않습니다.FragmentTransaction hide() 활동 레크 리 에이션시 (구성 변경/etc)

백 스택의 모든 조각을 다시 추가하므로 이전에 숨겨진 조각이 표시됩니다. Ex) 조각 A (hide), B (show), C (hide), D (hide)는 백 스택에 있습니다. 나는 이것에 대한 A, B 및 C

FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); 

    ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out); 

    // Hide all fragments other than the first 
    for (int i = 1; i < fragments.length; i++) { 
     if (fragments[i] != null) { 
      ft.hide(fragments[i]); 
     } 
    } 

    // Display only the first fragment 
    if (fragments[0].isAdded()) { 
     ft.show(fragments[0]); 
    } 
    else { 
     ft.add(R.id.content_view, fragments[0], fragmentTag); 
    } 

    ft.commit(); 

모든 해결 방법을로드 한 후, 예를 들어,이 조각 D가 상단에 표시 돌리면?

[편집] 문제의 컨텍스트에 대한 세부 정보를 추가합니다.

내가 수행하려고하는 것은 바텀 바 (어느 탭이 탭되었는지를 알려주는 내 사용자 정의보기)를 사용하여 단편 사이를 동일한 상태로 전환 할 수 있다는 것입니다.

예로 Instagram, Quora 및 Google Plus 앱이 있습니다.

enter image description here

[Scrotos에 응답하여 편집 2]이 내 발표자 클래스입니다. loadFirstScreen()은 위의 조각 트랜잭션을 수행합니다. 다른 것들은 내용을 설정하고 청취자를 등록하는 것과 같은 단지 초기화입니다.

public void onCreate(Bundle savedInstanceState) { 
    mView.initActionbar(); 
    mView.initViews(); 
    mModel.getUserProfile().subscribe(new Subscriber<UserProfile>() { 
     @Override 
     public void onCompleted() { 
     } 

     @Override 
     public void onError(Throwable e) { 
     } 

     @Override 
     public void onNext(UserProfile userProfile) { 
      mView.initDrawer(userProfile); 
     } 
    }); 

    if (savedInstanceState == null) { 
     mView.loadFirstScreen(); 
    } 
} 
+0

왜 조각을 숨기고 추가/제거하지 않습니까? – Scrotos

+0

문제의 컨텍스트를 더 많이 편집했습니다. 추가/제거/대체 할 때 조각은 onCreateView와 같은 수명주기를 거쳐 자체를 다시 작성합니다. 나는 그것이 라이프 사이클 메소드를 통과하는 것은 괜찮지 만, 프래그먼트가 이전과 같은 뷰 상태를 갖기를 원한다. 예 : 리사이클 뷰 스크롤 위치 등. – awonderer

+0

recyclerview 스크롤 위치를 포함하여 onSaveInstanceState에 조각의 상태를 저장하고 onCreate 또는 onCreateView에서 번들을 기반으로 스크롤 위치를 설정해야합니다. – Scrotos

답변

0

코드가 실제로 작동했습니다. 한 가지주의해야 할 점은 구성 변경에서 레크리에이션하는 동안 조각에서 hidden()이 참이면 작업 모음 제목을 설정하지 않는 것입니다.

채팅을위한 @Scrotos에 감사드립니다.

0

표시하는 응용 프로그램에서 컨테이너 ID를 기준으로 조각을 제거/추가하고있는 것 같습니다. onCreate 또는 onCreateView에서 onSaveInstanceState 및 savedInstanceState 번들을 사용하여 조각 상태를 유지하면서

+0

onSaveInstanceState()는'replace()'를 호출 할 때 호출되지 않습니다. 내가 놓친 게 있니? – awonderer