FragmentPagerAdapter
의 무한 확장자를 만들었습니다 (this site에서이를 수행하는 방법에 대한 예제가 있음). 이렇게하면 52 개의 조각 (매주 한 번)을 50 개 (임의의 숫자) 반복하여 사용자에게 무한한 조각 느낌을 줄 수 있습니다.ViewPager.setCurrentItem은 smoothScroll이 true로 설정된 경우에만 작동합니다.
스크롤 할 때/ViewPager.setCurrentItem
를 호출하여 조각 사이에 점프, 내가 보는 두 가지 시나리오가 있습니다 :
- 하나 개의 조각 중 하나의 방법을 점프 - 모든 괜찮습니다. 이는 아마도 에서이 사용 사례를 전문으로하는 코드 때문일 것입니다 (
We are doing a jump by more than one page
으로 시작하는 주석 찾기) - 두 개 이상의 조각으로 건너 뛰면
setCurrentItem
이 호출 될 때만 새 조각이 화면에 올바르게 표시됩니다smoothScroll
이true
(즉,setCurrentItem(i, true)
)으로 설정된 경우.if (smoothScroll) { smoothScrollTo(destX, 0, velocity); if (dispatchSelected) { dispatchOnPageSelected(item); } } else { if (dispatchSelected) { dispatchOnPageSelected(item); } completeScroll(false); scrollTo(destX, 0); pageScrolled(destX); }
이것은 내가 깊이에서 오전 지점입니다 : 그렇지 않으면 내가 무엇을 볼 수에서 빈 화면
이 ViewPager.scrollToItem
가에 다음 코드를 가지고 있기 때문에, 이것은 아마도입니다. 왜 이것이 if/else
이 내가 겪고있는 현상을 일으키는가?
첫 번째로 보게 될 것은'FragmentPagerAdapter # getItem()'이 적절한 위치에서 제대로 호출되고 있는지입니다. 어떤 이유로 든 조각을 적절히로드하지 않는 것 같습니다. 어쩌면 두 번이라고 불리는 것을보아야합니다. 선택한 위치에 한 번, 한 번, 한 번. – DeeV
@Deev,이 아이디어를 테스트하기 위해 logcat에 항목을 추가했습니다. 결과는 pastie.org/private/ybvvn5rwl1465haic6fvq에서 확인할 수 있습니다. 'getItem'은'setCurrentItem (i, false)'(설명 할 수없는 상황)이 발생했을 때 3 번 호출됩니다. 로그에는'getItem (1327)', 아직'newInstance (27)'가 있습니다. 이것은 "무한한"뷰어 때문입니다. - 1327 % 52 = 27 – levengli
@levengi 그때 무슨 문제인지 잘 모르겠습니다. 예가 부드러운 스크롤이 가능하다는 가정하에 나온 것처럼 보입니다. – DeeV