Fragment는
Activity와 마찬가지로, 사용자에게 UI 화면을 제공하는데 사용하는 컴포넌트이다.
여러개의 Fragment를 하나의 Activity에 결합해 다양한 화면 구성의 UI를 제작 가능하다.
Fragment는
onCreate, onCreateView, onViewCreated,
그리고 companion object로 newInstance를 구현하여 생성할 수 있다.
newInstance로 생성하는 이유는 무엇일까?
-> Framework에 의해 제거되었다가 재생성될 때 유실된다.
만약 arguments를 bundle로 전달하면 재생성시 전달되므로, 유실되지 않는다.
onCreateView에서 layout을 inflate하는 단계로 뷰 바인딩을 진행하고, UI에 대한 작업은 진행하지 않는다.
onViewCreated에서 UI에 대한 초기화 작업을 진행한다.
처음에 Fragment 작업을 할 때, onCreateView에서 UI에 대한 작업을 했었는데, 왜 안되나 싶어서 찾아보니 onCreateView는 layout을 inflate하기만 하고, UI 로직에 관련된 것은 onViewCreated에서 작업해야한다는 것을 알게되었다...
Fragment의 생명주기는 호스트 Activity의 생명주기에 직접적으로 영향을 받는다.
Activity가 pause되면 그 안의 Fragment도 pause되고,
Activity가 소멸되면 그 안의 Fragment도 모두 소멸한다.
onAttach() -> 프래그먼트에 Activity에 붙을 때 호출된다.
onCreate() -> 프래그먼트가 Activity의 호출을 받아 생성되는 단계. 이때, newInstance를 통해 값을 꺼내 세팅할 수 있다
onCreateView() -> Layout을 inflate하는 단계. 뷰 바인딩을 진행한다.
onViewCreated() -> UI 초기화를 진행하는 단계.
onStart() -> Fragment가 사용자에게 보여지기 직전 호출되는 단계.
onResume() -> 사용자와 상호작용을 시작하는 단계. Resume상태로 전환될 때마다 진행해야 하는 초기화 작업들 세팅
onPause() -> 사용자가 Fragment 떠나면 가장 먼저 onPause()를 호출한다. 사용자와 상호작용 중지하는 단계.
onStop() -> 다른 액티비티가 화면을 완전히 가리게 되거나 화면이 더 이상 보여지지 않게 되는 상황에서 호출.
onDestroyView() -> Fragment와 연결된 View Layer가 제거되는 중일 때 호출되는 단계
onDestory() -> Fragment가 제거되기 직전 단계.
onDetach() -> Activity에서 프래그먼트를 없애준다.
FragmentManager
Fragment를 생성하고 Activity에 부착해준 후, Activity 또는 여러 Fragment간의 상호작용을 구현해야하는데,
FragmentManager는 Activity와 Fragment의 중간에서 서로를 이어주는 역할을 할 수 있다.
Fragment Transaction ( Android jetpack Fragment 라이브러리에서 제공하는 클래스 )
-> Fragment 추가/교체/삭제 작업을 제공한다.
supportFragmentManager.beginTransaction() 메서드 호출을 통해 instance를 생성할 수 있다.
보통 replace를 사용한다. (지정된 Fragment 이외의 Fragment를 제거하기 위해)
제거하지 않으면, 계속 프레그먼트 위에 프레그먼트... 반복한다.
이런 Fragment는 BottomNavigation과 같은 jetpack의 라이브러리와 자주 사용하는데,
다음 정리에서 이어가겠다.
'안드로이드 > 정리' 카테고리의 다른 글
[Android] Firebase에 관해... (0) | 2021.10.18 |
---|---|
[Android] ContentResolver, ContentProvider에 관해 (0) | 2021.10.12 |
[Android] Task에 관해 (0) | 2021.10.07 |
[Android] Intent에 관해 (0) | 2021.10.06 |
[Android] Activity의 생명주기 (0) | 2021.10.05 |