Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 毕加索:如何取消适配器中的所有图像请求_Android_Picasso - Fatal编程技术网

Android 毕加索:如何取消适配器中的所有图像请求

Android 毕加索:如何取消适配器中的所有图像请求,android,picasso,Android,Picasso,像往常一样,我们使用适配器来填充listView。在适配器中,我们使用毕加索加载图像。我看到,当将图像加载到目标(imageView)时,行被回收,毕加索将自动取消对该目标的请求 离开片段或活动时,如何取消所有未完成的请求 但仅当您不在列表/网格适配器中时!请求图像 对于相同的imageview/目标(例如,在适配器getView中)可以 这是自动的。您应该只需要取消(而不需要取消) 如果你提出要求,然后离开 屏幕 这个答案可能来得有点晚,但也许有人仍然需要它 定义一个提供清理方法的ViewHo

像往常一样,我们使用适配器来填充listView。在适配器中,我们使用毕加索加载图像。我看到,当将图像加载到目标(imageView)时,行被回收,毕加索将自动取消对该目标的请求

离开片段或活动时,如何取消所有未完成的请求

但仅当您不在列表/网格适配器中时!请求图像 对于相同的imageview/目标(例如,在适配器getView中)可以 这是自动的。您应该只需要取消(而不需要取消) 如果你提出要求,然后离开 屏幕


这个答案可能来得有点晚,但也许有人仍然需要它

定义一个提供清理方法的
ViewHolder

static class ImageHolder extends RecyclerView.ViewHolder {
    public final ImageView image;

    public ImageHolder(final View itemView) {
        super(itemView);
        image = (ImageView) itemView.findViewById(R.id.image);
    }

    public void cleanup() {
        Picasso.with(image.getContext())
            .cancelRequest(image);
        image.setImageDrawable(null);
    }
}
在适配器中实现
onViewRecycled()

static class ImageAdapter extends RecyclerView.Adapter<ImageHolder> {

    // ...

    @Override
    public void onViewRecycled(final ImageHolder holder) {
        holder.cleanup();
    }
}

RecyclerView.setAdapter(null)
将分离当前添加的所有
视图
s及其关联的
ViewHolder
s将被回收。

您也可以对片段/活动发出的请求使用
RequestCreator#标记(对象)
,然后使用
Picasso#取消标记(对象)
取消所有问题。

我想我没有把问题说清楚。我不担心因为屏幕上的滚动而取消对正在回收的行的请求。我知道毕加索会处理这件事。我的问题是,当离开拥有适配器的片段或活动时,如何取消所有请求。
public class MyFragment extends Fragment {
    private RecyclerView recycler;

    // ...

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        recycler.setAdapter(null); // will trigger the recycling in the adapter
    }
}