我創建了FragmentPagerAdapter
的無限延伸(有關如何在this site上實現此功能的示例)。這使我可以遍歷50個(任意數量)52個片段(每週一個),從而給用戶帶來無限的片段感。ViewPager.setCurrentItem僅適用於將smoothScroll設置爲true
滾動時/通過調用ViewPager.setCurrentItem
片段之間跳躍,有兩種情況,我看到:
- 跳只有一個片段無論哪種方式 - 一切正常。這可能是由於在
ViewPager.setCurrentItemInternal
(查找以We are doing a jump by more than one page
這個詞開始的註釋)中的專用代碼 - 僅當調用
setCurrentItem
時,跳過多個片段才能在屏幕上正確顯示新片段當smoothScroll
設置爲true
(即setCurrentItem(i, true)
);否則有黑屏
從我所看到的,這可能是因爲ViewPager.scrollToItem
中有下面的代碼:
if (smoothScroll) {
smoothScrollTo(destX, 0, velocity);
if (dispatchSelected) {
dispatchOnPageSelected(item);
}
} else {
if (dispatchSelected) {
dispatchOnPageSelected(item);
}
completeScroll(false);
scrollTo(destX, 0);
pageScrolled(destX);
}
這是我從我的深度的點。爲什麼這個if/else
會導致我正在經歷的現象?
我會看第一個地方是如果你的'FragmentPagerAdapter#getItem()'正確調用適當的位置。這聽起來像是由於某種原因沒有適當地加載片段。你應該看到它也叫三次。一旦在選定的位置,一個之前,一個之後。 – DeeV
@Deev,我添加了條目到logcat來測試這個想法。結果可以在pastie.org/private/ybvvn5rwl1465haic6fvq找到。當'setCurrentItem(i,false)'(即不明原因的情況)被觸發時,getItem被調用3次。請注意,該日誌具有'getItem(1327)'但'newInstance(27)'。這是因爲「無限」查看器 - 1327%52 = 27 – levengli
@levengi我不確定那是什麼問題。看起來這個例子可能是假設光滑滾動已啓用。 – DeeV