将imageView通过AsyncTask设置为listView

时间:2015-04-27 14:32:14

标签: android listview android-asynctask imageview

我正在尝试使用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);
        }
    }
}

这会将图像正确设置为具有照片的联系人,但如果联系人没有照片则会获得另一个联系人的照片。

欢迎任何帮助。

祝你好运!

1 个答案:

答案 0 :(得分:1)

如果您从头开始创建应用,我强烈建议您使用一些已建立的库进行图片加载/缓存等。一些最佳选择是Picasso(超级简单易用) )和Universal Image Loader(使用起来比较棘手,但配置选项更多)。

P.S。我只记得Boris Farber(Google Developer Advocate)关于图像加载的说法 - &#34;使用库。如果您是从零开始自己做的,那么您很有可能做错了/做错了事情&#34;。