ViewPager 预加载片段。
但是 pageWidth=0.5(每个屏幕 2 个片段),我认为它在当前位置之前加载了太多视图...
我有
pageLimit=1
和pageWidth=0.5
。我试图从支持 v4 中理解 ViewPager.java:
https://android.googlesource.com/platform/frameworks/support/+/support-library-27.1.1/core-ui/src/main/java/android/support/v4/view/ViewPager.java#1155
1155行,它说
// 填充可用宽度的 3 倍或不超过屏幕外的数量
// 向任一侧请求的页面,以较大者为准。 但是对于每个屏幕的多个片段,它在当前位置之前和之后加载的更多。
与谷歌示例项目https://github.com/googlesamples/android-SlidingTabsBasic/
添加
protected void onCreate(Bundle savedInstanceState) {
[...]
mViewPager.setCurrentItem(25);
@Override
public float getPageWidth(int position) {
// 2 fragments per screen
return .5f;
}
@Override
public int getCount() {
// 50 fragments
return 50;
}
public Fragment getItem(int position) {
[...]
Log.d("debugpageviewer", "position="+position);
}
加载 7 个片段(当前位置前 3 个)。 pageWidth 越小,之前加载的片段越多
那么,这是一个错误还是我错过了什么?
尝试在 onCreate 方法中调用 ViewPager 上的
setOffscreenPageLimit()
。
例如
mViewPager.setOffscreenPageLimit(2)
将确保始终保留不超过3个片段:当前片段和两个相邻片段。
你应该使用
ViewPager2
和FragmentStateAdapter
。在这里查看官方解释:
使用ViewPager2在片段之间滑动:https://developer.android.com/develop/ui/views/animations/screen-slide-2
从 ViewPager 迁移到 ViewPager2:https://developer.android.com/develop/ui/views/animations/vp2-migration