만족

[Android] ViewPager의 fragment가 계속해서초기화되는 문제 본문

[Android] ViewPager의 fragment가 계속해서초기화되는 문제

FrontEnd/Android Satisfaction 2020. 3. 22. 19:36

ViewPager는 요렇게 생긴 놈이다.

 

정확히 말하자면 ViewPager를 setAdapter를 이용해 fragment를 집어넣어서 만든다.

 

그런데, ViewPager는 현재 선택된 Fragment의 상태만 유지하고 나머지는 버린다.

 

이게 무슨말이냐 하면, SampleFragment의 onCreate에서 "created"라는 토스트 메시지를 띄우게 하고

이 SampleFragment를 페이저에 집어넣으면

페이지가 바뀔 때 마다, "created"라는 메시지가 발생한다.

 

이게 뭐지? 라는 생각을 할 수도 있지만,

페이저가 있다고 해서 모든 유저가 전체 페이지를 다 사용하는 것도 아닐테고,

일반적으로 이미 사용이 끝난 페이지의 상태를 저장할 필요가 없기 때문에

기본적으로 상태 유지를 하는 페이지의 수는 1로 지정되어 있다.

 

이때 ViewPager의 setOffscreenPageLimit(int limit)를 사용하면 된다.

 

setOffscreenPageLimit는 ViewPager가 상태를 유지할 페이지의 최대 갯수를 변경할 수 있게 해준다.

(limit를 넘어간 page에 대해서는 죽이고, 선택되었을 때 다시 create한다)

 

따라서 모든 페이지를 한번 초기화하고 다시는 초기화하지 않게 하려면

viewPager.setOffscreenPageLimit(PAGE_LENGTH) 처럼 사용하면 된다.

 

코드를 뜯어 보면, ViewPager.setOffscreenpageLimit()는 다음과 같이 생겼다.

 

 

사용 예

 

 

 

 



Comments