Android Set viewpager的第一项

时间:2015-03-18 09:07:33

标签: android android-viewpager

我有一个viewpager。此viewpager可以具有动态数量的页面取决于服务器,用户可以从他们想要的任何页面开始。所以我编程如下..

mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(mStartPosition);

mStartPosition是一个开始的位置..

我的问题在这里。此视图寻呼机始终加载页面,其中0,1和mStartPosition和附近页面按顺序加载。如果mStartPosition为10,则加载0,1,并加载9,10,11。它会降低性能并浪费数据。

我想从mStartPosition和附近的页面开始。救救我〜!

2 个答案:

答案 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

所以基本上: 在布局寻呼机之前使用这些调用。