【问题标题】:picasso: how to cancel all image requests made in an adapter毕加索:如何取消适配器中的所有图像请求
【发布时间】:2017-03-23 04:37:52
【问题描述】:

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

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

【问题讨论】:

    标签: android picasso


    【解决方案1】:

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

    定义一个提供清理方法的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();
        }
    }
    

    在 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
        }
    }
    

    RecyclerView.setAdapter(null) 将分离所有当前添加的Views,其关联的ViewHolders 将被回收。

    【讨论】:

      【解决方案2】:

      但前提是您不在列表/网格适配器中!请求图像 对于相同的图像视图/目标(例如,在适配器 getView 中)会做 这是自动的。你应该只需要取消(而且你不需要 实际上需要)如果您提出请求然后离开 屏幕。

      https://github.com/square/picasso/issues/83

      【讨论】:

      • 我认为我没有清楚地说明这个问题。我担心取消对由于滚动屏幕而被回收的行的请求。我知道毕加索会处理这个问题。我的问题是如何在离开拥有适配器的片段或活动时取消所有请求。
      【解决方案3】:

      您也可以在片段/活动发出的请求上使用RequestCreator#tag(Object),然后使用Picasso#cancelTag(Object) 取消所有请求。

      【讨论】:

        猜你喜欢
        • 2020-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 2017-08-05
        • 1970-01-01
        • 2017-05-18
        相关资源
        最近更新 更多