Android ViewPager 预加载太多片段

问题描述 投票:0回答:2

ViewPager 预加载片段。

但是 pageWidth=0.5(每个屏幕 2 个片段),我认为它在当前位置之前加载了太多视图...

fff 我有

pageLimit=1
pageWidth=0.5

预加载 LEFT1 和 LEFT2 应该没问题,但为什么要预加载 LEFT3?
LEFT3 不在下一个左侧屏幕上...

我试图从支持 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 越小,之前加载的片段越多

那么,这是一个错误还是我错过了什么?

android android-viewpager
2个回答
1
投票

尝试在 onCreate 方法中调用 ViewPager 上的

setOffscreenPageLimit()

例如

mViewPager.setOffscreenPageLimit(2)
将确保始终保留不超过3个片段:当前片段和两个相邻片段。


0
投票

你应该使用

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

© www.soinside.com 2019 - 2024. All rights reserved.