如何在离开片段或活动时取消所有未完成的请求?
答案 0 :(得分:27)
这个答案可能会有点晚,但也许有人仍然需要它......
定义一个提供清理方法的<ol type="I">
<li>Elemento primero
<ol type="I">
<li>Subelemento primero</li>
<li>Subelemento segundo</li>
</ol>
</li>
<li>elemento segundo</li>
</ol>
<ol type="I">
<li>Subelemento primero</li>
<li>Subelemento segundo</li>
</ol>
:
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()
当您的片段视图被销毁时(或者您希望的时候)取消Picasso请求:
static class ImageAdapter extends RecyclerView.Adapter<ImageHolder> {
// ...
@Override
public void onViewRecycled(final ImageHolder holder) {
holder.cleanup();
}
}
public class MyFragment extends Fragment {
private RecyclerView recycler;
// ...
@Override
public void onDestroyView() {
super.onDestroyView();
recycler.setAdapter(null); // will trigger the recycling in the adapter
}
}
将分离所有当前添加的RecyclerView.setAdapter(null)
,其关联的View
将被回收。
答案 1 :(得分:1)
但是只有你不在列表/网格适配器中!请求图像 对于相同的imageview / target(例如,在适配器getView中)将会这样做 这是自动的。你应该只需要取消(而且你不需要 实际需要)如果您正在提出请求然后离开 屏幕。
答案 2 :(得分:1)
您还可以对您的片段/活动发出的请求使用RequestCreator#tag(Object)
,然后使用Picasso#cancelTag(Object)
取消所有请求。