为什么在 mViewPager.setCurrentItem(value) 处传递的值在 FragmentStatePagerAdapter 的 getItem(int value) 方法中递增或递减

why value passed at mViewPager.setCurrentItem(value) is incremented or decremented in getItem(int value) method of FragmentStatePagerAdapter

我在我的应用程序中使用了 NagivationDrawerViewPager。当用户 select 抽屉中的项目时,视图分页器将相应地设置片段。

在MainActivity中class

....
@Override
    public void onNavigationDrawerItemSelected(int position) {

        Log.d("POSITION", "=======================================");
        Log.d("POSITION ItemSelected", position +"");


        if(mViewPager != null){
            mViewPager.setCurrentItem(position);

        }

    }
......

我的 ViewPagerAdapter class 是

public class LessonPageAdapter extends FragmentStatePagerAdapter {

    public LessonPageAdapter(FragmentManager fm) {

        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = new LessonFragment();
        Bundle args = new Bundle();
        Log.d("POSITION PagerAdapter", position +"");
        args.putInt(LessonFragment.ARG_SECTION_NUMBER, position);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 7;
    }
}

我发现从 onNavigationDrawerItemSelected(int position) 方法调用 mViewPager.setCurrentItem(position) 时传递的 position 的值与 position I 的值不同(递增或递减)进入 FragmentStatePagerAdaptergetItem(int position) 方法。

11-01 12:31:59.706    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:31:59.706    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 1
11-01 12:31:59.706    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 2
11-01 12:32:11.089    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:11.089    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 2
11-01 12:32:11.090    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 3
11-01 12:32:18.586    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:18.586    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 3
11-01 12:32:18.586    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 4
11-01 12:32:29.474    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:29.474    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 4
11-01 12:32:29.475    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 5
11-01 12:32:35.476    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:35.477    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 5
11-01 12:32:35.477    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 6
11-01 12:32:43.704    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:43.704    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 6
11-01 12:32:51.287    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:51.287    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 5
11-01 12:32:51.287    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 4
11-01 12:33:00.529    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:33:00.530    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 4
11-01 12:33:00.530    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 3
11-01 12:33:09.084    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:33:09.084    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 3
11-01 12:33:09.084    8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 2

谁能告诉我原因?解决方法是什么?

您的应用运行正常吗?在 viewPager 中,不仅加载当前页面,还加载左页和右页,以使滚动看起来无缝。所以调用 getItem() 来预加载下一页,你的日志是完全正确的。

您还可以使用 viewPager.setOffscreenPageLimit(int) 来设置要预加载的每一面的页面数。默认和最小值为 1。