구성 변경 (회전 등)시 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 앱이 있습니다.
[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();
}
}
왜 조각을 숨기고 추가/제거하지 않습니까? – Scrotos
문제의 컨텍스트를 더 많이 편집했습니다. 추가/제거/대체 할 때 조각은 onCreateView와 같은 수명주기를 거쳐 자체를 다시 작성합니다. 나는 그것이 라이프 사이클 메소드를 통과하는 것은 괜찮지 만, 프래그먼트가 이전과 같은 뷰 상태를 갖기를 원한다. 예 : 리사이클 뷰 스크롤 위치 등. – awonderer
recyclerview 스크롤 위치를 포함하여 onSaveInstanceState에 조각의 상태를 저장하고 onCreate 또는 onCreateView에서 번들을 기반으로 스크롤 위치를 설정해야합니다. – Scrotos