我正在使用 FragmentPagerAdapter 和 ViewPager 处理轮播视图。我面临的问题是,每当我在每个页面滚动时更改图像名称时,只会显示第二个图像错误名称。在这种情况下,它显示第一张图像的名称,从第三张图像开始,位置再次从 0 增加到 1 等等。我检查了 onPageScrolled 中的位置,第一张和第二张图像都显示为 0。我还观察到的另一件事是,只有在显示第二张图像时,getItem 方法才会调用。如果您有解决此问题的任何想法,请指导我。
问问题
529 次
1 回答
1
ViewPager 实例化当前片段周围的片段,以获得平滑的滑动。使用setOffScreenPageLimit(int)
您设置应保留到当前页面任一侧的页面数。默认值为 1。
- 当您设置 ViewPager 的适配器并显示第一页(位置 = 0)时,也会创建第二页的片段(getItem()),而当前页面位置仍为 0。
- 您滑动到页面 2 并在当前页面位置为 1 时创建第三个片段。(现在当前页面的每一侧都有一个现有片段实例)
- 滑动到第 3 页并创建第四个片段,显示当前页面位置,现在是 2。(第 1 页片段被销毁)
- 等等...
如果要获取不同片段的实际位置,请直接从 中获取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 回答