Fragment는 FragmentActivit 내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타냅니다. 여러 개의 프래그먼트를 하나의 액티비티에 결합하여 창이 여러 개인 UI를 빌드할 수 있으며, 하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있습니다. 프래그먼트는 액티비티의 모듈식 섹션이라고 생각하면 됩니다. 이는 자체적인 수명 주기를 가지고, 자체 입력 이벤트를 수신하고, 액티비티 실행 중에 추가 및 삭제가 가능합니다(다른 액티비티에 재사용할 수 있는 "하위 액티비티"와 같은 개념).
프래그먼트 및 프래그먼트 관리자
프래그먼트는 인스턴스화되면 INITIALIZED 상태에서 시작됩니다. 프래그먼트가 프래그먼트의 나머지 수명 주기를 전환하도록 하려면 프래그먼트를 FragmentManager에 추가해야 합니다. FragmentManager가 프래그먼트가 어떤 상태여야 하는지 확인한 다음 그 상태로 전환하는 일을 담당합니다.
프래그먼트 수명 주기를 벗어나면 FragmentManager는 프래그먼트를 호스트 활동에 연결하고 프래그먼트가 더 이상 사용되지 않을 때는 프래그먼트를 분리하는 작업도 합니다. Fragment 클래스에는 두 가지 콜백 메서드 onAttach()와 onDetach()가 있습니다. 이러한 메서드는 관련 이벤트 중 하나가 발생했을 때 작업을 위해 재정의할 수 있습니다.
onAttach() 콜백은 프래그먼트가 FragmentManager에 추가되었을 때 호스트 활동에 연결되면 호출됩니다. 이 시점에 프래그먼트는 활성 상태이며 FragmentManager가 수명 주기 상태를 관리하고 있습니다. 이 시점에서 findFragmentById() 같은 FragmentManager 메서드가 이 프래그먼트를 반환합니다.
onAttach()는 항상 수명 주기 상태 변경 전에 호출됩니다.
onDetach() 콜백은 프래그먼트가 FragmentManager에서 삭제되었을 때 호스트 활동에서 분리되면 호출됩니다. 프래그먼트가 더 이상 활성 상태가 아니므로 findFragmentById()를 사용하여 더 이상 검색할 수 없습니다.
onDetach()는 수명 주기 상태 변경 후에 항상 호출됩니다.
Fragment Lifecycle(프래그먼트 생명주기)
콜백
onAttach()
- 프래그먼트가 액티비티에 붙여질 때 호출된다.
- 인자로 Context가 주어진다.
onCreated()
- 프래그먼트가 생성될 때 호출된다.
- FragmentManager에 add될 때 호출된다.
- Bunddle로 액티비티로부터의 데이터가 넘어온다. UI 초기화 불가능
onCreateView()
- onCreated() 이후 바로 호출된다.
- 레이아웃 inflate
- savedInstanceState로 이전 상태에 대한 데이터 제공
- View와 관련된 객체를 초기화 할 수 있음
onViewCreated()
- onCreateView()가 정상적으로 호출되면 리턴되는 View 객체를 받아 호출된다.
- 이때 프래그먼트 데이터를 초기화( View의 초기값 설정 )
- onCreateView()를 통해 반환된 View 객체는 onViewCreated()의 파라미터로 전달
- Lifecycle이 INITIALIZED 상태로 업데이트
- LiveData 옵저빙, RecyclerView, ViewPager2에 사용될 Adapter 세팅은 이 메소드에서 해주는 것이 적절함
onViewStateRestored()
- 저장되어 있던 모튼 값이 복원되었을 경우 호출된다.
- View lifecycle : INITIALIZED → CREATED 변경
onStart()
- 액티비티의 onStart()와 유사, 사용자에게 보여질 수 있을 때 호출된다.
- View lifecycle : CREATED → STARTED 변경
onResume()
- 사용자와 상호작용이 가능한 상태일 때 호출된다.
- Fragment가 보이는 상태에서 모든 Animator와 Transition 효과가 종료되고, 프래그먼트와 사용자가 상호작용 할 수 있을 때 onResume Callback
onPause()
- 사용자가 프래그먼트를 떠날 때 호출된다.
onStop()
- 프래그먼트가 화면에 보이지 않을 때 호출된다.
- 부모 액티비티, 프래그먼트가 중단될 때, 상태가 저장될 때 호출
- lifecylce : STARTED -> CREATED
- FragmentTransaction을 안전하게 수행하는 마지막 지점
onSaveInstanceState()
- 임시로 정보를 저장할 때 호출된다.
onDestroyView()
- 모든 animation, transaction이 완료, 프래그먼트와 관련된 뷰가 제거될 때 호출된다. // 화면으로부터 벗어났을 때
- Fragment View에 대한 모든 참조가 제거되어야 함
onDestroy()
- 프래그먼트가 완전히 제거되거나, FragmentManager가 destroy 됐을 경우에 호출된다.
- Fragment Lifecycle의 끝을 알림
onDetach()
- 프래그먼트가 액티비티로부터 해제되어질 때 호출된다. //떨어질 때 호출
참고 - https://developer.android.com/guide/fragments/lifecycle?hl=ko