우선 정의부터 보자.
ChildFragmentManager는 Fragment 내에 존재하며, 관리되어지는 private한 FragmentManager이다.
따라서 Fragment와 Fragment 내의 자식들만 사용 가능하다. Fragment내의 자식들은, 부모의 FragmentManager. 즉 부모 Fragment가 갖고있는 FragmentManager에 접근할 수 있다.
SupportFragmentManager은 Fragment의 Activity와 Fragment들의 상호작용을 위해 존재한다.
따라서 Activity, Activity 내의 Fragment, 그 Fragment의 자식 Fragment까지 모두 사용 가능하다.
쉽게 말하면 Activity 바로 아래 존재하는 자식 Fragment를 관리할 때 FragmentManager가 사용되며,
그 Fragment 내에 존재하는 Fragment들을 관리하기 위해 ChildFragmentManager가 필요하다.
예를 들어서,
Activity
- Fragment (자식 Fragment)
- ViewPager2
여기에 추가적으로 ViewPager2의 자식 Fragment A, B 가 있다.
이는 자식 Fragment 내의 Fragment 이므로 손자 Fragment가 된다.
이제 예시로, FragmentA가 보여지고 있는 상황을 FragmentB로 변경하려면 어떻게해야할까?
ChildFragmentManager을 이용하여 바꾸어주면 된다.
getChildFragmentManager().beginTransaction().replace(R.id.container_view, FragmentB.newInstance()).commit();
반면 ChildFragmentManager가 없다면 어떤 불편함이 찾아올 수 있을까?
만약 손자 Fragment인 FragmentA에서부터 이벤트를 통해 FragmentB로 바꿔야할 경우, 객체가 생성될 때 인터페이스를 넘겨 처리를 해야하거나, 상위 Fragment 객체의 public method를 통한다거나, 최상위 Activity로부터 자식 Fragment 객체를 얻어 처리한다거나 등등 불편함이 한두가지가 아니다. 반면 ChildFragmentManager가 존재한다면 위처럼 쉽게 해결이 가능하다.
'Android' 카테고리의 다른 글
[Android] MotionLayout 사용법 (0) | 2021.08.24 |
---|---|
[Android] java.lang.IllegalArgumentException: Service not registered: com.google.android.gms.measurement.internal.zzja (0) | 2021.02.19 |
[Android] NavigationHostFragment 내의 자식 Fragment 참조하기 (0) | 2021.01.20 |
[Android] 안드로이드 투명도 일람 (0) | 2020.11.30 |
[Android] Google Play Console 앱 배포 시 업로드 오류 - apk 파일을 업로드 할 수 없습니다 해결 방법 (0) | 2020.11.02 |