티스토리 뷰

728x90
반응형


Fragment add(), replace(), BackStack



기본적으로 Fragment가 Activity의 View에 올라가면,


onAttach -> onCreate -> onCreateView -> onCreateanimator -> onViewCreated -> onActivityCreated ->

onStart -> onResume ->


의 흐름이고


Activity에서 제거가 된다면


onPause -> onStop -> onDestroyView -> onCreateAnimator -> onDestroy -> onDetach


의 순으로 호출이 된다.


attach/detach는 Activity에 '포함' 되는 과정을 일컫는다.



add()


기존 Fragment를 그대로 둔 채 (onStop 호출하지 않음) 새로운 Fragment를 올린다.

올리는 시점에서 그 전에 올라가있는 Fragment에는 아무런 영향이 없다.


add는 액티비티가 죽을 떄 onDetach를 호출하지 않을 때가 있다.

그리고 가끔씩 add 해도 겹치는 현상이 일어나기도 한다고 한다



replace()


기존 Fragment를 detach까지 끝낸 다음 새로운 Fragment을 올린다

(백스택설정을 하면 detach까지는 되지 않고 onDestroyView까지만 처리된다)



BackStack


'beginTransition 부터 commit 까지의 전환' 자체를 저장하고 있다

add/replace 뿐 아니라 hide/show 등의 처리도 Back키로 복귀가 가능하다


BackStack의 현재 카운트는 FragmentManager.getBackStackCount()로 가져올 수 있다


트랜지션의 add()가 기존에 들어있는 Fragment를 그대로 두고 새로 추가하는 거지만

트랜지션에 addToBackStack()을 해주지 않으면 Back 시 그냥 액티비티만 종료될 뿐이다 (replace도 마찬가지)


popBackStack() 은 BackStack을 하나씩 pop 하는 메소드이며, 비동기적으로 이루어진다

이를 동기식으로 처리하려면 Immediate postfix가 붙은 메소드로 호출을 하면 된다



References


http://hyosang82.tistory.com/363


http://www.masterqna.com/android/65046/%EC%A0%88%EC%8B%A4%ED%9E%88-%EA%B6%81%EA%B8%88%ED%95%A9%EB%8B%88%EB%8B%A4-%EC%A0%9C%EB%B0%9C-%ED%94%84%EB%9E%98%EA%B7%B8%EB%A8%BC%ED%8A%B8-%EA%B4%80%EB%A0%A8



반응형
공지사항
최근에 올라온 글