通用图片加载器会在每次滚动后重新加载图片。

3
根据标题,我该如何阻止UIL在ListView滚动后重新加载图像?
以下是我实现的Image Loader代码:
public class LatestAdapter extends BaseAdapter {

    ...

    // UIL
    private ImageLoaderConfiguration config;
    private File cacheDir;
    private DisplayImageOptions options;
    private ImageLoader imageLoader = ImageLoader.getInstance();

    public LatestAdapter(Context context, ArrayList<ItemListModel> items) {
        this.arrItemList = items;
        this.context = context;

        if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
            cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"JunkFolder");
        else
            cacheDir=context.getCacheDir();
        if(!cacheDir.exists())
            cacheDir.mkdirs();

        options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.placeholder)
                .showImageOnFail(R.drawable.error)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                .build();

        config = new ImageLoaderConfiguration.Builder(context)
                .memoryCache(new WeakMemoryCache())
                .denyCacheImageMultipleSizesInMemory()
                .discCache(new UnlimitedDiscCache(cacheDir))
                .threadPoolSize(5)
                .defaultDisplayImageOptions(options)
                .build();


        imageLoader.init(config);
    }

    ...

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        ...

        imageLoader.displayImage(nm.getThumbnail().getImage100(), vh.tvThumbnail, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String s, View view) {
            }

            @Override
            public void onLoadingFailed(String s, View view, FailReason failReason) {
            }

            @Override
            public void onLoadingComplete(String s, View view, Bitmap bitmap) {
            }

            @Override
            public void onLoadingCancelled(String s, View view) {
            }
        });
    }
}

每次我滚动ListView(向上或向下),它都不会保存先前加载的图像,而是重新加载ImageView。如何“保存”图像,以便它不会在每次滚动时闪烁?
2个回答

6

启用磁盘缓存和内存缓存,像以下这样在每次加载图片之前使用User ImageAware类:

ImageAware imageAware = new ImageViewAware(imageview,false); imageloader.displayImage(url, imageAware,otions);


1
需要动态管理视图高度,以便在滚动时视图不会刷新。请参考以下链接:https://dev59.com/DVnUa4cB1Zd3GeqPYDK8#25178562 - Hitendra Joshi

2
您无法保存ime。列表适配器创建显示的项目以及上下某些项目。所有其他项目在需要时被销毁,然后重新创建。这就是convertView的目的。
在ImageLoader库中,即使您有缓存,当创建项目时,库会查找一些缓存的图像然后显示它,或者继续在网络上下载它。
现在,第一次创建您的图像需要一些时间从网络获取并将其缓存。
其他时间创建它需要很少的时间来查看缓存并显示它。但它也不是即时显示...

7
谢谢提供信息。我已经把 .cacheOnDisc(true).cacheInMemory(true) 放到了 options 中,现在它按照我想要的方式工作了 :) - emen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接