仅在使用Picasso下载图像后显示ListView项目

时间:2015-04-10 17:42:21

标签: android listview picasso

我正在使用Picasso在我的ListView中加载图片。此ListView的项目没有占位符图像,并且加载的图像具有不同的大小。此列表在我的应用中用作时间轴。我的问题是,当我快速滚动时,项目出现,并在一段时间后显示图像。当我滚动列表时,这会导致项目被扩展的不良影响。

我想知道在Picasso下载图片后是否有某种方法可以显示此项目。

这就是我在adpater的getView中设置图像的方法:

View v = convertView;

ViewHolder viewHolder;

if (v == null) {
    v = inflater.inflate(R.layout.timeline_item, parent, false);
    viewHolder = new ViewHolder();
    viewHolder.photo = (ImageView) v.findViewById(R.id.image_view);
    v.setTag(viewHolder);
} else {
    ViewHolder = (ViewHolder) v.getTag();
}

Picasso.with(context).load(timeline.getImage()).into(ViewHolder.photo);
return v;

2 个答案:

答案 0 :(得分:0)

我之前处理过一个相对类似的问题。您正在寻找的是一种回调方法。毕加索在创建你的请求时会有这样的事情。

public void into(android.widget.ImageView target, Callback callback)

因此,您需要将com.squareup.picasso.Callback的实现添加到当前代码中并在此处提供:

Picasso.with(context).load(timeline.getImage()).into(ViewHolder.photo, <Callback here>);

在该回调中,您将图像添加到列表视图中。

当然这有问题。代码段似乎来自适配器的getView()。这意味着您在ListView中滚动到该视图后,只尝试将视图添加到ListView。

我确实知道如何实现这一目标,但我不能100%确定它的效果如何。您可以尝试将布局(R.layout.timeline_item)设置为可见性View.GONE。这可能导致所有图像在加载ListView后的同时开始加载,我假设您希望它们只在列表中到达后才开始加载。

答案 1 :(得分:0)

我认为毕加索一切皆有可能:)

我真的不知道你想要做什么,但我想解决方案是在图像加载时放一些东西,不是吗?

你可以使用那个

Picasso.with(context)
.load(url)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(imageView);

您可以在加载图片时设置图片,如果出现错误,请显示错误图标,只是说。

如果这对您无效,请告诉我们,我们可以尝试找到另一种解决方案。