android - Recycler view with volley 图像请求(取消请求)

标签 android bitmap android-volley android-recyclerview android-viewholder

所以我使用回收器 View 在网格中显示图像,并使用 volley 库从 url 下载图像作为位图。

public void onBindViewHolder(final TrendingAdapter.ViewHolder viewHolder, int i) {
    ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap bitmap) {
            if (bitmap != null) {
                viewHolder.getmImageView().setImageBitmap(bitmap);
            }
        }
    }, 0, 0, null,
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                }
            });
    AppController.getInstance().addToRequestQueue(request);
}

问题是当我在下载图像之前滚动并跳过一个或多个 View 并且该 View 被回收时,图像下载请求不会在那些中间 View 上取消,导致那个/那些图像在实际图像加载到该 View 中。

所以我考虑使用标签取消那些中间图像请求,但不知道如何取消其他并行 View 中的请求!

此外,当我使用 volley NetworkImageView(它自己处理此类图像取消)时,也会给出完美的结果。但是我需要获取每个图像的位图以从中选择颜色,所以我不能使用 NetworkImageView。

问)如何在使用 recyclerview 膨胀的特定 ImageView 上取消所有待处理的 volley 图像请求(除了应该加载且不影响其他平行 View 的图像请求)?

最佳答案

您应该使用 ImageLoader 类,而不是直接向 RequestQueue 添加请求。这样,用于获取图像的 get() 方法将返回类型为 ImageContainer 的对象。

将这个ImageContainer保存在ViewHolder中,当 View 被回收时,只需调用回收图像上的cancelRequest()方法即可如果尚未执行,则取消请求。

看看 NetworkImageView 的代码。它以类似的方式工作。

关于android - Recycler view with volley 图像请求(取消请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26591390/

相关文章:

java - 如何将共享首选项文件从内部存储传输到外部存储?

java - 围绕不以位图为中心的点旋转位图

c++ - C/C++ 向左或向右移动/偏移/移动位图?

php - Android volley 通过图片上传发送信息两次

android - 解析 Volley 错误

java - 从 Logcat 打印最后 200 行

java - 在 Java API/Jar 中隐藏公共(public)方法

android - JakeWharton 的 DiskLruCache - 如何使用 Volley 实现?

android - 如何在 Android 中使用 Retrofit 2.0 处理无网络连接?

java - 子采样比例 ImageView - 使图钉标记在 Imageview 上可点击