ViewPager での UIL の使用に問題があります。pagerAdapter の instantiateItem メソッドで displayImage(...) を呼び出します ( UIL github repoのサンプル プロジェクトと同様)。
ただし、ViewPager は ImageView を再利用しているため、前、現在、および次のページに同じ ImageView を定義します。したがって、PagerAdapter を作成すると、最初に instantiateItem() が 3 回呼び出され、次に displayImage() が 3 回呼び出されます。しかし、ImageView が再利用され、3 ページ目に関連付けられているため、「ImageView は別の画像に再利用されています。タスクはキャンセルされました。」というメッセージが表示されます。3 ページ目の画像のみが読み込まれます。最初の2つはキャンセルされます。
ただし、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);
...
}
}