使用UIL和ViewPager时遇到问题。我在pagerAdapter的instantiateItem方法中调用displayImage(...)(就像UIL github repo中的示例项目一样)。
但是,由于ViewPager正在重用ImageViews,它为前一页,当前页和下一页定义了相同的ImageView。因此,当我创建PagerAdapter时,首先调用instantiateItem()3次,然后调用displayImage()3次。但是由于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);
...
}
}