프래그먼트

1 minute read

개요

프래그먼트는 UI의 재사용 가능한 부분을 나타낸다. 프래그먼트는 독립적으로 존재할 수 없고 액티비티 또는 다른 프래그먼트를 호스트로 하여 존재해야 한다. 프래그먼트는 액티비티와 마찬가지로 자체 생명 주기를 가지고 자체 입력 이벤트를 처리할 수 있다. 또한 액티비티와 마찬가지로 XML 파일로 레이아웃을 정의한다.

FragmentManager

액티비티(또는 부모 프래그먼트)의 뷰 계층에 프래그먼트의 뷰 계층을 추가, 삭제, 교체한다. 프래그먼트를 추가, 삭제, 교체할 때는 FragmentTransaction을 사용한다.

picture 6

FragmentManager의 참조가 있으면 이를 사용하여 사용자에게 표시되는 프래그먼트를 조작할 수 있다.

생명 주기

프래그먼트는 액티비티와 마찬가지로 생명 주기를 가진다. 생명 주기를 진행하며 상태에 따라 콜백 함수가 호출되며 그것을 오버라이드하여 적절한 작업을 수행하면 된다.

picture 7
프래그먼트 생명 주기

onCreate

모델과 같이 프래그먼트 구성에 필요한 것을 초기화하여 프래그먼트 인스턴스를 구성한다. 아직 프래그먼트의 뷰가 생성되지 않은 상태다.

onCreateView

프래그먼트 뷰의 레이아웃을 inflate하고 inflate한 뷰를 호스트 액티비티(또는 부모 프래그먼트)에 반환한다.

onViewCreated

onCreateView에서 반환된 view가 onVIewCreated의 인자로 전달된다. 이곳에서 초기값을 설정하고 listener를 설정한다.

onViewStateRestored

저장해둔 값이 프래그먼트 뷰의 계층 구조에 복원됐을 떄 호출된다.

onStart

프래그먼트가 화면에 보일 때 호출된다.

onResume

프래그먼트가 focus를 가질 때 호출된다.

onPause

프래그먼트가 focus를 잃을 때 호출된다.

onStop

프래그먼트가 보이지 않을 때 호출된다.

onSaveInstanceState

프래그먼트의 상태를 저장할 수 있다.

picture 8
API 버전에 따른 콜벡 함수 순서

API 28 미만에서는 onStop보다 전에 호출됐지만, 이상부터는 onStop 이후에 호출된다.

onDestroyView

프래그먼트 exit 애니메이션과 트랜지션이 완료되고 프래그먼트가 화면에 보이지 않을 때 호출된다. 이때 GC를 위해 프래그먼트 뷰에 대한 모든 참조를 제거해야 한다.

onDestroy

프래그먼트가 파괴될 때 호출된다.

사용 예

ViewPager2

ViewPager2로 좌, 우 스와이프 제스처로 프래그먼트를 전환할 수 있다.

BottomNavigationView

BottomNavigationView는 액티비티 하단에 위치하며, 각각의 영역을 클릭해 프래그먼트를 전환할 수 있다.

Comments