[Android] ViewPager 안에 ViewPager을 넣었을 때 검게 변하는 이유

요즘 앱에서는 ViewPager을 쓸 일이 많죠. 당장 탭 달린 어플 아무거나 뜯어봐도 100에 99정도는 ViewPager로 구현해놓으니까요. 덕분에 저 두 개를 중첩해서 쓸 일도 분명 있는데, 보통 (...최소한 저는) 아무 생각 없이 아래 코드로 초기화 하게 됩니다.

// in viewpager's fragment
ViewPager mCarousel = view.findViewById(R.id.timeline_carousel);
mCarouselAdapter = new CarouselAdapter(getFragmentManager());
mCarousel.setAdapter(mCarouselAdapter);

물론 이러면 참 재밌는 버그가 하나 생깁니다. 다른 Fragment로 넘어갔다 돌아오면 저 ViewPager가 검게 변해서는 다시 초기화 되지 않죠. 구글링을 해봐도 FragmentStatePagerAdapter 쓰라는 말 밖에 없습니다. 물론, 써도 그대로고요.

뭐가 안될 때는 일단 API 문서를 열어봐야겠죠.

getFragmentManager()
Return the FragmentManager for interacting with fragments associated with this fragment's activity.
이 Fragment의 Activity에 관련되어 Fragment와 상호작용을 하기 위한 FragmentManager를 리턴합니다.

조금 위에는 이런 메소드가 있습니다.

getChildFragmentManager()
Return a private FragmentManager for placing and managing Fragments inside of this Fragment.
이 Fragment 안에 Fragment를 배치하고 관리하기 위한 private FragmentManager을 리턴합니다.

getChildFragmentManager 메소드를 쓰면 정상적으로 동작합니다.

결론: API 문서를 잘 읽어보자.