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