Android ViewPager预加载了太多片段

时间:2018-11-04 13:16:22

标签: android android-viewpager

ViewPager会预加载片段。

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

fff 我有pageLimit=1pageWidth=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倍或不超过屏幕外的数量
  //请求到任一页面的页面,以较大者为准。   但是对于每个屏幕多个片段,它在当前位置之前和之后的当前位置加载的更多。

使用Google示例项目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越小,之前加载的片段越多。

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

1 个答案:

答案 0 :(得分:0)

尝试使用onCreate方法在ViewPager上调用setOffscreenPageLimit()

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