我正在尝试使用Asynctask设置listView的imageViews。
问题与其他用户一样,当我快速滚动屏幕时,图片没有正确设置到联系人,如果我在停止imageViews时连续快速地向上和向下滚动,直到所有的头部结束。 / p>
代码如下:
new CargarFotoSegundoPlano(imagenParcela).execute(Integer.parseInt(children.getIdContacto())); //this is the call to asynctask
类
public class CargarFotoSegundoPlano extends AsyncTask<Object, Void, Bitmap>
{
private final WeakReference<ImageView> imageViewReference;
ImageView imageView;
//String tag;
public CargarFotoSegundoPlano(ImageView imageView)
{
imageViewReference = new WeakReference<>(imageView);
this.imageView = imageView;
//this.tag = imageView.getTag().toString();
}
@Override
protected Bitmap doInBackground(Object... params)
{
//imageView = (ImageView) params[0];
Integer idLong = (Integer) params[0];
return cargarFotoContacto(idLong); //this method return a bitmap
}
@Override
protected void onPostExecute(Bitmap bitmap)
{
if (isCancelled())
{
bitmap = null;
// imageView.setImageBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher));
}
if (imageViewReference != null)
{
ImageView imageView = imageViewReference.get();
if (imageView != null)
{
if (bitmap != null)
{
Animation mover = AnimationUtils.loadAnimation(context, R.anim.difuminado_foto_mini);
imageView.startAnimation(mover);
imageView.setImageBitmap(bitmap);
}
else
{
Drawable placeholder = imageView.getContext().getResources().getDrawable(R.drawable.fastcontacts);
imageView.setImageDrawable(placeholder);
}
}
}
else
{
Drawable placeholder = imageView.getContext().getResources().getDrawable(R.drawable.fastcontacts);
imageView.setImageDrawable(placeholder);
}
}
}
这会将图像正确设置为具有照片的联系人,但如果联系人没有照片则会获得另一个联系人的照片。
欢迎任何帮助。
祝你好运!
答案 0 :(得分:1)
如果您从头开始创建应用,我强烈建议您使用一些已建立的库进行图片加载/缓存等。一些最佳选择是Picasso(超级简单易用) )和Universal Image Loader(使用起来比较棘手,但配置选项更多)。
P.S。我只记得Boris Farber(Google Developer Advocate)关于图像加载的说法 - &#34;使用库。如果您是从零开始自己做的,那么您很有可能做错了/做错了事情&#34;。