【问题标题】:Recyclerview duplicating images using GlideRecyclerview 使用 Glide 复制图像
【发布时间】:2016-09-10 03:04:46
【问题描述】:

我正在使用 Recyclerview 和 Glide 实现一个列表来异步加载图像。发生的情况是,每次回收卡片时,在图像完全加载之前,滑行图像响应都会转到另一个卡片视图。结果,我们在列表中看到以某种方式重复的图像。我尝试了很多方法,但我仍然遇到这个问题。我真的很感谢任何帮助我解决它的答案。

这是我的简化代码:

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ZueiraViewHolder> {

    public static ArrayList<Zueira> zueiras;
    public Context context;
    private static final int IMAGE_WIDTH = 400;
    private static final int IMAGE_HEIGHT = 600;

    public RVAdapter(ArrayList<Zueira> zueiras, Context context) {
        this.zueiras = zueiras;
        this.context = context;
    }

    @Override
    public void onBindViewHolder(ZueiraViewHolder holder, int position) {

        // set description
        holder.zueira_description.setText(zueiras.get(position).getDescription());

        // THIS THING IS ASYNC!
        // I think when I scroll too fast, since it's async, the response may be
        // coming late because that card was already recycled
        Glide.with(context)
            .load(zueiras.get(position).getUrl())
            .asBitmap()
            .into(new SimpleTarget<Bitmap>(IMAGE_WIDTH, IMAGE_HEIGHT) {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {

                    // set image bitmap
                    holder.zueira_image.setImageBitmap(resource);

                    // some click listener
                    holder.zueira_image.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {

                            // some logic goes here after the image is completely loaded

                        }
                    });

                }

                @Override
                public void onLoadFailed(Exception e, Drawable errorDrawable) {
                    super.onLoadFailed(e, errorDrawable);
                }
            });
    }

    @Override
    public ZueiraViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.custom_row, viewGroup, false);
        ZueiraViewHolder pvh = new ZueiraViewHolder(v);
        return pvh;
    }

    @Override
    public int getItemCount() {
        return zueiras.size();
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    public static class ZueiraViewHolder extends RecyclerView.ViewHolder {

        CardView cv;
        public ImageView zueira_image;
        public TextView zueira_description;

        ZueiraViewHolder(View itemView) {
            super(itemView);

            cv = (CardView) itemView.findViewById(R.id.cv);
            zueira_image = (ImageView) itemView.findViewById(R.id.zueira_image);
            zueira_description = (TextView) itemView.findViewById(R.id.zueira_description);

        }
    }

}

谢谢。

【问题讨论】:

    标签: android image android-recyclerview android-cardview android-glide


    【解决方案1】:

    试试这个

    .diskCacheStrategy(DiskCacheStrategy.NONE) // 缓存没有意义,因为它已经保存到文件中 .skipMemoryCache(true) // 如果原始图像发生变化,请确保重新读取

    【讨论】:

    • 谢谢。我添加了这两行,但图像仍在重复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多