Recyclerview适配器和Glide - 每4-5行相同的图像

jea*_*rme 37 android parse-platform recycler-adapter android-recyclerview android-glide

我有这个问题 - 只是为了测试目的,我添加ParseFileParseObject收到列表中的一个.它不是仅显示在该行中,而是显示每4-5行,有时更多,有时更少.我认为回收视图与此有关.奇怪的是,其他数据(从这个例子中删除)适用于position变量.

@Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if(parseList.get(position).get("logo") != null){
            ParseFile image = (ParseFile) parseList.get(position).get("logo");
            String url = image.getUrl();
            Glide.with(context)
                    .load(url)
                    .placeholder(R.drawable.piwo_48)
                    .transform(new CircleTransform(context))
                    .into(holder.imageView);


        }

    }
Run Code Online (Sandbox Code Playgroud)

Sam*_*udd 76

这里的答案是不正确的,尽管它们在正确的轨道上.

您需要调用Glide#clear(),而不仅仅是将drawable图像设置为null.如果您不打电话clear(),乱序完成的异步加载可能仍会导致视图回收问题.您的代码应如下所示:

@Override 
public void onBindViewHolder(ViewHolder holder, int position) {
    if (parseList.get(position).get("logo") != null) {
        ParseFile image = (ParseFile) parseList.get(position).get("logo");
        String url = image.getUrl();
        Glide.with(context) 
                .load(url)
                .placeholder(R.drawable.piwo_48)
                .transform(new CircleTransform(context)) 
                .into(holder.imageView);
    } else {
        // make sure Glide doesn't load anything into this view until told otherwise
        Glide.clear(holder.imageView);
        // remove the placeholder (optional); read comments below
        holder.imageView.setImageDrawable(null);
    }
} 
Run Code Online (Sandbox Code Playgroud)

  • 等一下 - 你写了一个来自Bumptech的Glide吗?:)) (5认同)
  • 什么是v4中Glide.clear的迁移 (4认同)
  • 可能需要使用`Glide.with(context).clear(view)` (4认同)
  • 如果您不希望占位符显示,可以在clear()调用后调用setImageDrawable(null).clear()只是确保Glide将来不会对视图做任何事情(如果稍后将完成异步加载). (2认同)