Activity와 마찬가지로, 사용자에게 UI화면을 제공하는데 사용하는 컴포넌트
여러개의 Fragment를 하나의 액티비티에 결합하여 다양한 화면 구성의 UI를 제공할 수 있음
Fragment는 항상 Activity 내에서 호스팅 되어야 함
Fragment의 생명주기는 호스트 Activity의 생명주기에 직접적으로 영향을 받음
FragmentManager를 통해 Fragment를 관리
Fragment는 자체 생명주기를 가진다. 따라서 Activity가 실행중인 동안 Fragment로 이루어진 분할된 화면들의 상태를 자체적으로 조작할 수 있음
onCreatView()
onViewCreated()
onStart()
onResume()
onPause()
onStop()
onDestroyView()
onDestroy()
Fragment를 생성하고 Activity에 부착해준 후에는, Activity 또는 여러 Fragment간의 상호작용을 구현하는 것이 중요하다.
FragmentManager는 Activity와 Fragment의 중간에서 서로를 이어주는 역할
FragmentManager를 통해 Fragment Transaction 수행
FragmentManager는 back stack에 프래그먼트 추가/교체/삭제 작업에 의한 변경 사항을 push 및 pop하는 작업을 담당
Activity에 supportFragmentManager를 통해서 런타임시에 Fragment 추가/교체/삭제 작업을 할 수 있다.
findFragmentById() : Fragment컨테이너 내의 현재 Fragment를 참조
findFragmentByTag() : Fragment에 고유한 태그를 부여하여 태그를 통해서 Fragment를 참조
Android Jetpack Fragment 라이브러리에서 제공하는 클래스
Fragment Transaction 클래스는 Fragment 추가/교체/삭제 작업을 제공
Fragment Transaction은 FragmentManager의 단일 수행 단위
하나의 Fragment Transaction 단위 내에 Fragment Transaction 클래스가 제공하는 Fragment 추가/교체/삭제 작업등을 명시하면 된다.
하나의 Fragment Transaction 단위 내에 작성된 Fragment 조작 관련 작업들은 해당 Fragment Transaction 수행될 때 모두 실행된다. 프래그먼트 조작 작업의 묶음 단위
val fmTransaction = supportFragmentManger.beginTransaction()
Fragment Transaction은 호스트 Activity가 자신의 상태를 저장하기 전에 생서되고 커밋되어야 함