android - 在 ListView 中使用通用图像加载器加载一次图像

标签 android listview universal-image-loader

我有一个 ListView ,我想在其中显示视频的缩略图,但每次我滚动图像时都会再次下载。我怎样才能下载一次图像并显示它。 这是我的代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if(convertView == null){
        rootView = mInflater.inflate(R.layout.adapter_video, parent, false);
        holder = new ViewHolder();
        holder.ivThumbnail = (ImageView) rootView.findViewById(R.id.ivThumbnailVideoAdapter);
        rootView.setTag(holder);
    }
    else{
        rootView = convertView;
        holder = (ViewHolder)rootView.getTag();
    }
    imageLoader.displayImage(update.get(position).getThumbnail(), holder.ivThumbnail, option);
    return rootView;
}

最佳答案

使用 UIL,图像的下载是通过 DisplayImageOptions 配置的

例如:

mOptionsSimple = new DisplayImageOptions.Builder().resetViewBeforeLoading(true)
                                                                .cacheOnDisc(true)
                                                                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                                                                .bitmapConfig(Bitmap.Config.RGB_565)
                                                                .build();

这里,cacheOnDisc 为 true 将图像保存在磁盘上,而不是缓存中。当您滚动时,图像将重新加载,当然是因为在 ListView 中单元格被回收。但是如果已经下载了这个选项,它将从磁盘重新加载

您也可以/或启用 memoryCache 但要小心这个。如果图像管理不正确,它可能是 OutOfMemoryException 的原因

还有 ImageLoaderConfiguration 这是一个例子:

    config = new ImageLoaderConfiguration.Builder(getApplicationContext()).threadPoolSize(3)
                                                            .threadPriority(Thread.NORM_PRIORITY - 1)
                                                            .tasksProcessingOrder(QueueProcessingType.FIFO)
                                                            .imageDownloader(new MyImageDownloader(mContext))
                                                            .imageDecoder(new BaseImageDecoder(false))
                                                            .discCache(new UnlimitedDiscCache(cacheDir))
                                                            .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
                                                            .defaultDisplayImageOptions(mOptionsSimple)
                                                            .writeDebugLogs()
                                                            .build();

在最后一个示例中,discCache 不受限制,如果您认为它会占用太多磁盘空间,可以更改

关于android - 在 ListView 中使用通用图像加载器加载一次图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25936377/

相关文章:

android - Android Studio 中的 "Sync Now"按钮在哪里?

android - 无法 ResTable::remove()

events - 所选项目的 ListView 事件已更改

android - 在 ListView 中单击项目时,如何获取 sqlite 数据库中表的行 ID

android - 根据进度取消图像请求 Android - Image loader Volley , Picasso

android - ImageLoader.getInstance().getDiscCache().get(imageUrl) 返回不同的路径

android - 使用 UniversalImageLoader 将位图加载到数组中

android - 如何将文本值放在 MPAndroidChart 圆圈中?

java - Android传递长值Intent

android - 在android中单击Listview的单个项目时选择ListView的多个项目