在ViewPager中,UniversalImageLoader“ImageView被重用”

时间:2013-10-30 21:00:13

标签: android android-viewpager universal-image-loader

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

        ...

    }
}

0 个答案:

没有答案