像往常一样,我们使用适配器来填充listView.在适配器中我们使用picasso来加载图像.我看到,当将图像加载到目标(imageView)时,行会被回收,毕加索会自动取消对该目标的请求.
如何在离开片段或活动时取消所有未完成的请求?
sfe*_*era 27
这个答案可能会有点晚,但也许有人仍然需要它......
定义一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
onViewRecycled()在您的适配器中实现:
static class ImageAdapter extends RecyclerView.Adapter<ImageHolder> {
// ...
@Override
public void onViewRecycled(final ImageHolder holder) {
holder.cleanup();
}
}
Run Code Online (Sandbox Code Playgroud)
当您的Fragment视图被销毁时(或者您希望的时候)取消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
}
}
Run Code Online (Sandbox Code Playgroud)
RecyclerView.setAdapter(null)将分离所有当前添加的Views及其相关的ViewHolders将被回收.
但前提是您不在列表/网格适配器中!请求相同图像视图/目标的图像(例如,在适配器 getView 中)将自动执行此操作。如果您提出请求然后离开屏幕,则只需取消(实际上不需要)。
https://github.com/square/picasso/issues/83
| 归档时间: |
|
| 查看次数: |
8081 次 |
| 最近记录: |