Fragment Viewpager<Recyclerview>사라짐

푸른하늘·2021년 11월 29일
0
post-thumbnail

Fragment에서 Viewpaer를 사용할 때 겪을 수 있는 화면이 갱신되지 않는 이슈입니다. 좀 더 정확한 문제 상황을 보겠습니다.

> 상황

1)Fragment 안 Viewpager 안에 Recylcerview를 생성했다
2)하지만 Fragemnt A와 B를 왔다 갔다하면 기존 Recyclerview가 사라진다.



<처음생각>
1) 무조권 생명주기에서 Fragment Life cycle에 문제라고 생각했었다.

onAttach() -> onCreateView() -> onViewCreated() -> onActivityCreated() -> showItemList()

showItemList() -> onAttach() -> onCreateView() -> onViewCreated() -> onActivityCreated()

이런식으로 oncreateview 가 되기전에 showItemList()가 먼저 시작되어서 onActivitiyCreated()에 함수에 adatper 부분을 연결해줘야 한다 하여 시도는 해봤지만 잘 해결 되지 않았다. 참조문서

Fragment안에서 또다른 Fragment를 관리하는 경우에

getFragmentManager()가 아닌, getChildFragmentManager() 를 사용해야 한다!

  // Fragment의 OnCreateView() 내부코드!
MoviePagerAdapter adapter = new MoviePagerAdapter(getChildFragmentManager());

for(Movie movie : movies){
  ...
  adapter.addItem(frag);
}

pager.setAdapter(adapter);

왜?

문제의 근본 원인은 프래그먼트 내부에 프래그먼트를 포함했기 때문에 예외가 발생합니다.

중첩 프래그먼트의 특징은 XML로 추가할 수가 없고, 항상 동적으로 추가해야 합니다.
그렇기 때문에 부모 프래그먼트는 자식 프레그먼트를 관리하고 자식프래그먼트가 UI를 담당하는 구조로 자주 설계됩니다.
액티비티에서 프래그먼트를 다룰 때는 getSupportFragmentManager()를 사용하였지만 중첩 프래그먼트를 다룰 때는, getChildFragmentManager()를 사용을해야 오류가 발생 하지 않습니다!

profile
Developer-Android-CK

0개의 댓글