【问题标题】:SimpleDraweeView in ListView Item Display WrongListView项目显示错误的SimpleDraweeView
【发布时间】:2015-12-24 09:11:38
【问题描述】:

我在ListView 项目中使用了SimpleDraweeView。如果header url不为null,则显示来自网络的图片,或者显示来自本地drawable的默认图片。

代码如下:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.info_contact_item,null);
            holder.ivHeader = findViewById(convertView, R.id.iv_header);
            holder.setTag(holder);
        } else {
            holder = (BaseViewHolder) convertView.getTag();
        }
        final String url = data.get(position).get("headerUrl");
       if (StringUtil.isNull(url)){
            holder .ivHeader.setBackgroundResource(R.drawable.default_head_icon);
       }else{
            ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(uri))
                    .setAutoRotateEnabled(true) 
                    .setLocalThumbnailPreviewsEnabled(true) //
                    .setProgressiveRenderingEnabled(true) //
                    .build();
            DraweeController controller = Fresco.newDraweeControllerBuilder()
                    .setImageRequest(imageRequest)
                    .setOldController(simpleDraweeView.getController())
                    .setAutoPlayAnimations(true)
                    .build();
            holder.ivHeader.setController(controller);
        }
        return convertView;
    }

当我将ListView 滚动到最后时,SimpleDraweeView 显示与最后一个屏幕图像数据相同的图像。有人有同样的问题吗?

【问题讨论】:

  • the last screen image data 是什么?
  • 屏幕上会显示六个项目,当我将listview滚动到下六个项目时,第7个项目的simpledraweeview会显示第一个图像数据。
  • 请在您的适配器中发布完整的源代码。你应该写一个日志来检查第 7 项是否加载了正确的 url。第 7 项是否加载了与第 1 个图像数据相同的 url
  • 我查看了日志,url是正确的。第 7 项 url 为空,第 1 项是正确的 url
  • 我不确定,因为我从不使用 if (StringUtil.isNull(url))。你能用 if (url == null){ 替换它吗

标签: android listview android-listview fresco


【解决方案1】:

参考this 代码,当您希望更新您的ListView 数据时,不要忘记调用notifydatasetchanged(),这将反映ListView 中的更改。

我希望这会有所帮助:)

【讨论】:

  • ,感谢帮助,我没有更改数据,所以没有必要使用notifydatasechanged()来刷新listview,我只是srcoll listview到下一个屏幕项。
猜你喜欢
  • 1970-01-01
  • 2016-06-25
  • 2020-04-30
  • 2019-04-22
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多