我在使用带有 ViewPager 的 UIL 时遇到问题。我在 pagerAdapter 的 instantiateItem 方法中调用 displayImage(...) (就像在UIL github repo中的示例项目中一样)。
但是,由于 ViewPager 正在重用 ImageView,它为上一页、当前页和下一页定义了相同的 ImageView。因此,当我创建 PagerAdapter 时,首先调用了 3 次 instantiateItem(),然后调用了 3 次 displayImage()。但由于 ImageView 被重用并与第三页关联,我得到“ImageView 被重用于另一个图像。任务被取消。” 并且只加载了第三页的图像。前两个被取消。
但是,UIL 示例项目没有遇到这个问题。我浏览了整个示例项目,看不出与我的任何区别。所以我真的很困惑。
这是我的代码片段:
private class PhotoPagerAdapter extends PagerAdapter {
private LayoutInflater inflater;
private DisplayImageOptions options;
PhotoPagerAdapter() {
inflater = getActivity().getLayoutInflater();
options = new DisplayImageOptions.Builder()
.showImageOnFail(R.drawable.ic_error)
.resetViewBeforeLoading(true)
.cacheOnDisc(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new FadeInBitmapDisplayer(300)).build();
}
...
@Override
public Object instantiateItem(ViewGroup view, int position) {
View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false);
ImageViewTouch imageView = (ImageViewTouch) imageLayout.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
((ActivityViewPager) getActivity()).imageLoader.displayImage(imageURLs.get(position), imageView, options, null);
...
}
}