gpt4 book ai didi

android - picasso 图像未加载到 GridView 中

转载 作者:行者123 更新时间:2023-11-29 21:08:35 25 4
gpt4 key购买 nike

我在使用 Picasso 时遇到问题,我有一个自定义适配器通过以下方式加载图像:

Picasso.with(this.ctx).load(contact.getPhotoURI()).placeholder(R.drawable.contact_no_picture).into(img);

它被加载到一个 ImageView 中,该 ImageView 位于 GridView 中。

结果如下:

enter image description here

如您所见,图片加载了一半,在某些情况下根本没有加载。

我错过了什么吗?

最佳答案

当在列表/网格中使用带有项目渲染器的 Picasso 时,我最终使用了库提供的 ListeningTarget 接口(interface):

创建一个扩展 ImageView 并实现 ListeningTarget 的自定义类。

public class PicassoImageView extends ImageView implements ListeningTarget
{...}

在覆盖的 onBitmapLoaded 方法中调用 this.setImageBitmap(bmp); 其中 bmp 是 Picasso 作为加载图像的位图传递的参数:

@Override
public void onBitmapLoaded(Bitmap bmp, LoadedFrom loadedFrom)
{
Log.d("Picasso", "Image loaded");
this.setImageBitmap(bmp);
}

将此类用于布局中的 img 实例。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" ...>

[...]
<com.your.packagename.PicassoImageView
android:id="@+id/renderer_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" ... />
[...]
</RelativeLayout>

然后像这样初始化它:

PicassoImageView img = (PicassoImageView) findViewById(R.id.renderer_icon);

将您对 Picasso 的调用更改为:

Picasso.with(this.ctx).load(contact.getPhotoURI())
.placeholder(R.drawable.contact_no_picture)
.into((ListeningTarget)img);

当然没有必要让 ImageView 实现 ListeningTarget,但我发现它比 Picasso 每次加载位图时搜索正确的 View 更容易。

关于android - picasso 图像未加载到 GridView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com