기존에 두 개의 페이지에 ViewPager가 포함된 swipe 뷰를 구현해 두었었는데, 한 개의 페이지를 다시 추가하게 되면서
세 개의 페이지를 swipe로 움직여 볼 수 있도록 하였다.
헌데 문제는 한번 마지막 페이지까지 움직이고 난 뒤 첫 페이지로 돌아가면
세번째로 보여주던 페이지를 다시 보여주는 현상이 있었다.
로그를 찍어보니 기존 코드에서는 페이지를 swipe 할때마다 새로 뷰를 만들어 보여주는 것을 볼 수 있었는데,
이때문에 페이지 이동마다 페이지 인덱스를 참조해야되나 하는등의 시행착오를 겪었는데 잘 되지 않았고
시간이 있고나서 찾은 방법은 ViewPager에 setOffscreenLimit을 거는 것이다.
ViewPager.setOffscreenPageLimit()
ViewPager는 Swipe view 생성을 위해 만드는 TabbedActivity를 생성할때 같이 자동으로 만들어지는데,
사용되는 ViewPager에
viewPager.setOffscreenPageLimit(사용하는 페이지 갯수)
를 설정함으로써 페이지 이동간에 뷰를 새로 생성하지도 않을뿐더러
멀쩡한 페이지를 두고 다시 다른 페이지를 그리는 일도 발생하지 않게 할 수 있었다.
다만, 액티비티 시작시에 모든 뷰를 그리고 난 뒤 다시 그리지 않기 때문에
능동적으로 뷰를 갱신하고자 할 때는 Listener를 따로 달거나 위 방법을 쓰지 않는등의 방식을 생각해봐야만 하겠다.
< 참조 >
https://github.com/aurelhubert/ahbottomnavigation/issues/65
'ANDROID' 카테고리의 다른 글
[안드로이드] 간단한 직렬화, 역직렬화 쓰기(Serialize, Deserialize) (0) | 2018.10.04 |
---|---|
[안드로이드] 소숫점 조정된 double 변수로 ValueAnimator 사용하기 (0) | 2018.07.13 |
[안드로이드] 기기의 GPS 정보를 따라 위도, 경도를 가져오기 (FusedLocationProviderClient) (0) | 2018.05.29 |
[안드로이드] 터치이벤트를 수동으로 생성해 입력하기 (0) | 2018.05.25 |
[안드로이드] 구글맵 객체를 참조해 onMapReady 함수 외부에서 제어하기 (0) | 2018.05.15 |