带有凌空图像请求的循环器视图(取消请求)

Kus*_*rma 1 android bitmap android-volley android-viewholder android-recyclerview

所以我使用Recycler视图在网格中显示图像,并使用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);
}
Run Code Online (Sandbox Code Playgroud)

问题是当我在下载图像之前滚动并跳过一个或多个视图并且该视图被回收时,图像donwnload reqest在这些中间视图上没有被取消,导致在实际图像之前闪现那些/那些图像加载在该视图中.

所以我想用标签取消那些中间图像请求,但无法弄清楚如何在其他并行视图中取消请求!

此外,当我使用凌空NetworkImageView(它自己这样的图像取消)给出了完美的结果.但我需要获取每个图像的位图来从中选择颜色,所以我不能使用NetworkImageView.

问)如何在使用recyclerview充气的特定imageview上取消所有待处理的凌空图像请求(除了它应该加载并且不影响其他平行视图的那个)?

Ita*_*ski 8

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

将此保存ImageContainerViewHolder,并且当视图被回收时,只需调用cancelRequest()回收图像上的方法即可取消请求(如果尚未执行).

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