FragmentContainerView란?
액티비티에서 프래그먼트를 호스팅하는 일반적인 패턴 중 하나는 FrameLayout을 사용하는 것이다. androidx.fragment 1.2.0 에서는 FragmentContainerView라는 새로운 뷰를 도입했다.
FragmentContainerView는 Fragment를 위해 특별히 설계된 레이아웃이다. FrameLayout을 확장하여 프래그먼트 트랜잭션을 안정적으로 처리 할 수 있고, 프래그먼트 동작을 조정할 수있는 추가 기능도 있다.
사용하는 방법은 프레그먼트용 컨테이너를 구현했던 방법과 동일하다.
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.fragment.app.FragmentContainerView>
FragmentContainerView를 사용하여 android : name 속성을 사용하여 Fragment를 추가 할 수도 있다. FragmentContainerView는 다음과 같은 일회성 작업을 수행한다.
- 프레그먼트의 새로운 인스턴스를 생성한다
- Fragment.onInflate(Context, AttributeSet, Bundle)를 호출한다.
- 프레그먼트를 프레그먼트 매니저에 추가하기 위한 프레그먼트 트랜잭션을 수행한다.
FrameLayout의 문제점
프레임 레이아웃은 프레그먼트의 z-ordering을 처리하는데 문제가 있다.
예를들어 entering 애니메이션 이후 exiting 애니메이션은 그 아래에 깔리면서 exiting 애니메이션이 잘 표현되지 않는다. FragmentContainerView는 z-ordering 을 보장하므로 슬라이딩 애니메이션을 볼 수 있도록 해준다.
앞의 내용은 19년 안드로이드 Dev Summit에서 발표한 동영상을 캡쳐했다. 캡쳐가 아닌 자연스러운 애니메이션으로 확인하기 위해 링크를 참조할 수 있다.