Rod*_*eco 9 android listview picasso
我在适配器内使用Target时遇到了很大的麻烦.我对代码的文档感到困惑
实现此类的对象必须具有{@link #equals(Object)}和{@link #hashCode()}的工作实现,以便在内部进行适当的存储.还将比较此界面的实例以确定是否正在进行视图回收.当在适配器中使用时,建议您将此接口直接添加到自定义视图类型,以确保正确的回收行为.
我试图以这种方式使用目标:
class CustomTarget implements Target {
private ImageView imageView;
public CustomTarget(ImageView imageView) {
this.imageView = imageView;
}
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
imageView.setImageDrawable(new RoundedAvatarDrawable(bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
imageView.setImageDrawable(errorDrawable);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
imageView.setImageDrawable(placeHolderDrawable);
}
@Override
public boolean equals(Object o) {
return imageView.equals(o);
}
@Override
public int hashCode() {
return imageView.hashCode();
}
}
@Override
public View getView(int position, View v, ViewGroup parent) {
....
RoundedAvatarDrawable r = new RoundedAvatarDrawable(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_avatar_seahorse));
ImageCacheController.with(mContext).getPicasso().load(member.getPicture_url()).resize(100, 100).centerCrop().placeholder(r).error(r).into(new CustomTarget(viewHolder.ivAvatar));
....
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,图像随机变换
fro*_*koi 12
你没有展示你的整个getView功能,所以不知道你如何使用viewHandler,这是我对正在发生的事情的看法:
你的问题是CustomTarget每次getView调用你都会创建一个新的.你反对拥有一个Target物体.让我详细说明一下.
当发出新的下载请求时,先前对同一目标的请求将停止,或者不会导致调用Target的回调.(因此,如果Target重新用于列表中的不同行,则不会获得两行的图像).
您正在为每个请求使用一个新对象,有效地暗示Picasso每个请求都是针对不同的行.该文档说" 还将比较此接口的实例以确定是否正在进行视图回收 ",因此,由于每个请求都有一个新创建的CustomTarget对象,因此没有两个请求具有相同的对象,并且不会检测到行回收.
您还使用viewHolder.在这种情况下,我认为viewHolder应该扩展Target接口(如果每行只有1个图像).这样,每次请求下载时,您都可以使用相同的对象而不是创建新对象.
你也将你的实现委托CustomTarget给了ImageView实现.确保ImageView equals和hashCode函数满足Picasso要求的要求.
关于如何实现的一些信息equals和hashCode:在Java中覆盖equals和hashCode时,哪些问题应该考虑?
| 归档时间: |
|
| 查看次数: |
7250 次 |
| 最近记录: |