我有一个viewpager。此viewpager可以具有动态数量的页面取决于服务器,用户可以从他们想要的任何页面开始。所以我编程如下..
mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(mStartPosition);
mStartPosition是一个开始的位置..
我的问题在这里。此视图寻呼机始终加载页面,其中0,1和mStartPosition和附近页面按顺序加载。如果mStartPosition为10,则加载0,1,并加载9,10,11。它会降低性能并浪费数据。
我想从mStartPosition和附近的页面开始。救救我〜!
答案 0 :(得分:1)
setCurrentItem(int item)
使用平滑的动画过渡设置当前项目。
您只需使用mViewPager.setCurrentItem(mStartPosition, false);
然后它只会加载9,10,11
答案 1 :(得分:0)
这是Android的限制,所以如果你在布局后设置适配器,那么预计会有0,1,10,9,11。否则你会得到10,9,11
答案很长:
检查源代码。
在使用适配器mViewPager.setAdapter(mAdapter);
填充寻呼机的源代码中(至少在support-v4-23.4.0中),寻呼机将始终转到位置0,因为它的成员mCurItem
是0。当您拨打mViewPager.setCurrentItem(mStartPosition, false);
时,下一行会更改mCurItem
。
如果您尝试在mViewPager.setCurrentItem(mStartPosition, false);
之前调用mViewPager.setAdapter(mAdapter);
以设置mCurItem
它将无法再次作为适配器仍然为空,并且无法正常工作,因为它将在设置之前返回。
但是,如果在布局寻呼机之前设置适配器,则其中mFirstLayout
中的特定属性不会立即导致填充,并且到时它将设置mCurItem
。
所以基本上: 在布局寻呼机之前使用这些调用。