ViewPager2 의 setCurrentItem() 이 동작하지 않을 때

이성민·2024년 10월 17일
0

안드로이드

목록 보기
7/19

이슈 발생

ViewPager2 로 리스트를 출력할 때, 필요에 따라 특정 페이지를 디폴트로 지정해줘야 할 때가 있다. 이때 우리는 setCurrentItem(position, animation) 를 사용하여 포지션을 설정해준다.

그런데 가끔씩 current position 설정 값과 상관없이 리스트의 첫번째가 나오는 문제가 발생한다. 아마 setCurrentItem 이 먹히지 않는 듯 하다.

원인 분석

setCurrentItem 이 동작하기 위해서는 BindingAdpter 로 전달받은 리스트가 ViewPager2 와 바인딩 되어있어야 한다. 그 후 setCurrentItem 은 이 바인딩 된 리스트를 기반으로 position 을 설정한다. 로그를 확인해 본 결과 역시나 submit list 보다 setCurrentItem 가 먼저 호출되는 것을 확인 할 수 있었다.

해결 방법

post 메소드를 활용하여 순서를 보장해주었다.

binding.viewPager.apply {
	...
   post {
   setCurrentItem(1, false)
}

이런 식으로 사용하니 의도한대로 동작하는 것을 확인 할 수 있었다.

post...?

View 클래스에서 상속받은 메소드로 UI 스레드에서 실행되는 작업을 예약하는데 사용함. 인자로 전달된 코드 블록을 메인 스레드의 메시지 큐에 추가하고, 해당 코드 블록은 큐에서 순서대로 실행된다.

post 메소드는 처음 사용해보았는데 앞으로 꽤나 활용도가 높은 녀석일듯 하다.

profile
Android Developer 이성민입니다

0개의 댓글