1

我在使用带有 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);

        ...

    }
}
4

0 回答 0