1

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);

        ...

    }
}
4

0 に答える 0