ViewPager位置对于不同的轮播图像保持相同

时间:2014-07-08 04:46:24

标签: android infinite-carousel

我正在使用FragmentPagerAdapter& amp; ViewPager。我面临的问题是每当我在每页滚动时更改图像名称时,只显示第二个图像错误的名称。在这种情况下,它显示第一图像的名称,并且从第三图像开始,位置再次从0增加到1&等等。我检查了onPageScrolled&中的位置。它在第一和第二时都显示0第二张图片。还有一件事我观察到只有在显示第二张图像时才会调用getItem方法。如果您有任何想法可以解决这个问题,请指导我。

1 个答案:

答案 0 :(得分:1)

ViewPager实例化当前片段周围的片段以获得平滑的滑动。使用setOffScreenPageLimit(int)设置应保留在当前页面任一侧的页数。默认值为1.

  1. 当您设置ViewPager适配器并显示第一页(位置= 0)时,还会创建第二页的片段(getItem()),而当前页面位置仍为0。
  2. 您滑动到第2页,并在当前页面位置为1时创建第三个片段。(现在,当前页面的每一侧都有一个现有片段实例)
  3. 滑动到第3页,创建第四个片段,显示当前页面位置,现在为2.(第1页片段已销毁)
  4. 等......
  5. 如果你想获得不同片段的实际位置,直接从FragmentPagerAdapter.getItem(int position)获取它,在返回之前将位置设置为片段的参数。

    public Fragment getItem(int position) {
        YourFragment fragment = new YourFragment();
        Bundle args = new Bundle();
        args.putInt("page_position", position);
        fragment.setArguments(args);
        return fragment;
    }
    

    然后,您可以像这样在YourFragment中获得该职位:

    int position = getArguments().getInt("page_position"));