为什么mvisPager.setCurrentItem(value)传递的值在FragmentStatePagerAdapter

时间:2015-11-01 06:25:08

标签: android android-viewpager navigation-drawer

我将NagivationDrawerViewPager一起用于我的应用。当用户选择抽屉中的项目时,视图寻呼机将相应地设置片段。

在MainActivity类

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

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


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

        }

    }
......

我的ViewPagerAdapter类是

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;
    }
}

我发现从position方法调用mViewPager.setCurrentItem(position)时传递的onNavigationDrawerItemSelected(int position)的值与我position的值不同(递增或递减) getItem(int position)的{​​{1}}方法。

FragmentStatePagerAdapter

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

1 个答案:

答案 0 :(得分:1)

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

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