Android

[Android] ChildFragmentManager vs SupportFragmentManager


우선 정의부터 보자.

 

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가 존재한다면 위처럼 쉽게 해결이 가능하다.