- Fragment는 동작 또는 Activity 내에서 UI의 일부를 나타냅니다.
- 여러 개의 프래그먼트를 하나의 액티비티에 조합하여 창이 여러 개인 UI를 구축할 수 있으며, 하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있습니다.
- 프래그먼트는 자체 수명 주기를 가지고, 자체 입력 이벤트를 받으며, 액티비티 실행 중에 추가 및 제거가 가능한 액티비티의 모듈식 섹션이라고 생각하면 됩니다.
- 프래그먼트는 항상 액티비티 내에 포함되어 있어야 하며 해당 프래그먼트의 수명 주기는 호스트 액티비티의 수명 주기에 직접적으로 영향을 받습니다.
- 분할된 화면들을 독립적으로 구성하기 위해 사용하거나 분할된 화면들의 상태를 관리하기 위해 사용합니다.
- onAttach()
- 프래그먼트가 액티비티에 attach 될 때 호출됩니다.
- 호출되면서 인자로 Context가 있는대 이 Context를 가지고 부모 액티비티에 listener interface를 implement했다면 형변환을 통해 가져올 수 있습니다.
- onCreate()
- 시스템은 프래그먼트를 생성할때 onCreate()를 호출합니다.
- 구현 내에서 프래그먼트의 기본 요소 중 프래그먼트가 일시정지되거나 중단되었다가 재개되었을 때 유지하고자 하는 것을 초기화해야 합니다.- onCreateView()
- 시스템은 프래그먼트가 자신의 UI를 처음으로 그릴 시간이 되면 호출합니다.
- 프래그먼트에 맞는 UI를 그리려면 메서드에서 View를 리턴해야 합니다.
- 이 메서드는 프래그먼트 레이아웃의 루트입니다.
- 프래그먼트가 UI를 제공하지 않는 경우 null을 반환하면 됩니다.- onActivityCreated()
- 액티비티에서 프래그먼트를 모두 생성하고 난 다음 호출됩니다.
- 액티비티의 onCreate()에서 setContentView()한 다음과 유사합니다.
- 이후에 UI 변경 작업이 가능합니다.- onStart()
- 액티비티에서의 역할과 비슷하다. 유저에게 프래그먼트가 보이도록 하는 역할입니다.- onResume()
- 프래그먼트가 비로소 화면에 보여지는 단계, 사용자에게 포커스를 잡은 상태입니다.
- 사용자와의 상호작용이 가능하다.다른 프래그먼트가 add 되는 경우
- onPause()
- 시스템이 이 메서드를 호출하는 것은 사용자가 프래그먼트를 떠난다는 첫 번째 신호입니다( 프래그먼트가 소멸 중이라는 뜻은 아니다 ).
- 현재 사용자가 세션을 넘어서 지속되어야 하는 변경 사항을 적용하려면 이곳에서 해야 합니다.- onStop()
- 프래그먼트는 더이상 보여지지 않게되며, 프래그먼트는 기능을 할 수 없습니다.- onDestroyView()
- 프래그먼트에 View들을 제거한다. 만약 add할 때 backstack을 사용했다면, 다시 해당 프래그먼트로 돌아 올때 onCreateView()가 호출됩니다.- onDestroy()
- 프래그먼트를 제거하기 직전에 호출됩니다.- onDetach()
- 프래그먼트 제거를 완료하고 액티비티와의 연결도 해제시킵니다.
- 생성시
onCreate - onCreateView - onViewCreated - onActivityCreated - onStart - onResume- 종료시
onPause - onStop - onDestroyView - onDestroy - onDetach
- FragmentPagerAdapter는 프레그먼트 개 수가 정해진 화면에 사용하면 좋습니다.
- 프래그먼트 매니저에서 한 번 생성된 프래그먼트의 인스턴스를 제거하지 않고 연결된 View 만 제거합니다.
- FragmentPagerAdapter를 사용하면 처음 프래그먼트가 생성 될 때 onCreate - onCreateView가 실행됩니다.
- 다른 화면으로 이동 하여 뷰가 제거되면 onDestroyView만 실행 되고 onDestroy - onDetach는 실행 되지 않습니다.
- MainActivity 에서 MainAdapter로 보낸 FragmentManger가 프레그먼트를 제거하지 않고 View만 다시 그려주고 있다는 것을 의미합니다.
- FragmentStatePagerAdapter 에서는 프래그먼트 개 수가 변하는 화면에 사용하면 좋다.
- 프래그먼트 매니저에서 한 번 생성된 프래그먼트의 인스턴스를 완전히 제거하여 메모리 누수 문제에 적합하게 대응할 수 있습니다.
- FragmentStatePagerAdapter에서는 onCreate - onCreateVIew와 onDestroy - onDestroyView 모두 실행 되면서 메모리를 효과적으로 관리할 수 있게 도와줍니다.
- ViewPager를 유동적으로 변경할 건지 않할 건지에 따라 선택하여 사용하면 되겠습니다.