본문 바로가기

ANDROID

[안드로이드] ViewPager를 사용하는 swipe view에서 페이지 다시 생성을 방지하기

기존에 두 개의 페이지에 ViewPager가 포함된 swipe 뷰를 구현해 두었었는데, 한 개의 페이지를 다시 추가하게 되면서


세 개의 페이지를 swipe로 움직여 볼 수 있도록 하였다.


헌데 문제는 한번 마지막 페이지까지 움직이고 난 뒤 첫 페이지로 돌아가면


세번째로 보여주던 페이지를 다시 보여주는 현상이 있었다.



로그를 찍어보니 기존 코드에서는 페이지를 swipe 할때마다 새로 뷰를 만들어 보여주는 것을 볼 수 있었는데,


이때문에 페이지 이동마다 페이지 인덱스를 참조해야되나 하는등의 시행착오를 겪었는데 잘 되지 않았고



시간이 있고나서 찾은 방법은 ViewPager에 setOffscreenLimit을 거는 것이다. 

ViewPager.setOffscreenPageLimit()



ViewPager는 Swipe view 생성을 위해 만드는 TabbedActivity를 생성할때 같이 자동으로 만들어지는데,


사용되는 ViewPager에 



viewPager.setOffscreenPageLimit(사용하는 페이지 갯수)



를 설정함으로써 페이지 이동간에 뷰를 새로 생성하지도 않을뿐더러


멀쩡한 페이지를 두고 다시 다른 페이지를 그리는 일도 발생하지 않게 할 수 있었다.


다만, 액티비티 시작시에 모든 뷰를 그리고 난 뒤 다시 그리지 않기 때문에


능동적으로 뷰를 갱신하고자 할 때는 Listener를 따로 달거나 위 방법을 쓰지 않는등의 방식을 생각해봐야만 하겠다.



< 참조 >


https://github.com/aurelhubert/ahbottomnavigation/issues/65


https://www.programcreek.com/java-api-examples/?class=android.support.v4.view.ViewPager&method=setOffscreenPageLimit