마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

tablayout 초기화 문제

0 추천
Activity 1에서

TabLayout을 이용해 fragment1, fragment2를 할당했습니다

각각의 fragment에는 recycleview를 사용한 상태인데,

최초 로딩시에는 tab1,tab2의 내용이 잘 표시되지만

tab2에서 tab1로 갓다가 다시 tab2로 오면 tab2의 내용이 사라져버려요

어떻게 해결해야하나요 ㅠㅠ
show7777 (1,170 포인트) 님이 2021년 2월 25일 질문

1개의 답변

0 추천
프레그먼트 이동을 replace로 하셨나요? 그럼, 프레그먼트 이동시 뷰를 초기화했다가 다시 복구를 할 겁니다. add/remove를 사용하시거나 아니면 ViewPager를 사용하셔도 ViewPager가 뷰상태를 대신 저장해 주구요.
아마 라이프사이클을 체크해 보시면 Fragment1에서 Fragmetn2로 갔다가 다시 Fragment1로 돌아올 때 onCreateView가 다시 호출 될 것으로 예상이 되네요. 이게 맞다면 Fragment1에서 뷰가 초기화 되었다가 다시 복구되기 때문에 그렇습니다. 해결방법은기존 뷰상태를 복구해 주는 겁니다. 이 경우는 onViewCreated에서 RecyclerView에 있었던 데이터를 어댑터로 푸시해 주면 됩니다.

 다른 방법으로는 onCreateView에서 View를 inflater할 때 이걸 MainActivity의 멤버변수에 저장했다가 다음에 onCreate뷰에서 뷰를 다시 복구할 때, 멤버변수에 값이 존재한다면 레이아웃을 inflate하지 마시고 대신 그 멤버변수를 사용해 보세요.
spark (224,800 포인트) 님이 2021년 2월 25일 답변
로그를 찍어보니 최초 접근시에는 각각 로그가 찍히던게
Fragment1에서 Fragmetn2로 갔다가 다시 Fragment1로 돌아올 때
Fragment1에서 onCreateViewd의 Fragment1,Fragment2의 로그가 같이 찍힙니다
그래서 Fragment2에서 onViewCreated 에서 데이터를 어댑터로 푸시를 했지만
똑같이 사라져요 ㅠㅠ
프래그먼트2의 모든 생명주기에 로그를찍어봣는데
다시 돌아오면 프래그먼트2의 로그가 전부 프래그먼트1에서찍히더라구요
도저히 해결방법을 못찾겠어서 그냥 뷰페이저로 구현했어요 ㅠㅠ
...