안드로이드/정리

[Androdi] Fragment에 관해..①

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도 모두 소멸한다.

출처 : AndroidDeveloper

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