0

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

4

1 回答 1

1

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

  1. 当您设置 ViewPager 的适配器并显示第一页(位置 = 0)时,也会创建第二页的片段(getItem()),而当前页面位置仍为 0。
  2. 您滑动到页面 2 并在当前页面位置为 1 时创建第三个片段。(现在当前页面的每一侧都有一个现有片段实例)
  3. 滑动到第 3 页并创建第四个片段,显示当前页面位置,现在是 2。(第 1 页片段被销毁)
  4. 等等...

如果要获取不同片段的实际位置,请直接从 中获取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"));
于 2014-07-08T06:51:40.287 回答