我遇到onBitmapLoaded
的问题。该方法应该在它应该被调用时(它被称为第二次进入我的视图)。不过,我保留了对目标的引用,因为我将其添加到arraylist
。
我不明白为什么它不起作用。 有人有想法吗?
public void loadBitmap() {
if(loadtarget == null) {
loadtarget = new Target(){
@Override
public void onPrepareLoad(Drawable arg0) {
Log.d("Bitmap","On prepare load");
targetList.remove(this);
return;
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.d("Bitmap","OKAY for :" + filename);
targetList.remove(this);
handleLoadedBitmap(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
Log.d("Bitmap","Error for :" + filename);
}
};
}
targetList.add(loadtarget);
Picasso.with(context).load(imageUrl).into(loadtarget);
}
答案 0 :(得分:0)
如果targetList和loadtarget都是局部变量,那么一旦方法完成,它们将被标记为GC收集。 确保targetList是一个类变量,以使其比方法更长。
答案 1 :(得分:0)
我找到了一些解决问题的技巧。
替换: Picasso.with(上下文).load(IMAGEURL).into(targetList.get(I));
使用:
Picasso.with(context).load(imageUrl).transform(new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
handleLoadedBitmap(source);
return source;
}
@Override
public String key() {
return "";
}
}).into(imageView); // imageView is a fictive imageView allocated only for this operation
我的代码正在运行。我不确定它是最好的解决方案,但它解决了我的问题。