Android的异步加载图片ListView中 - 图像闪烁(Android Async loadi

2019-10-21 03:12发布

我一直在努力,在ListView中异步加载图像,因为他们正在加载时,他们中的一些闪烁(他们被另一个加载图像取代),其中一些在错误的项目显示。

类下载图片:

class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
  ImageView bmImage;

  public DownloadImageTask(ImageView bmImage) {
      this.bmImage = bmImage;
  }

  protected Bitmap doInBackground(String... urls) 
  {
      String urldisplay = urls[0];
      Bitmap mIcon11 = null;

      try 
      {
        InputStream in = new java.net.URL(urldisplay).openStream();
        mIcon11 = BitmapFactory.decodeStream(in);
      } 
      catch (Exception e) {}

      return mIcon11;
  }

  protected void onPostExecute(Bitmap result) {
      bmImage.setImageBitmap(result);
  }
}

要求每一个项目,当我到ListView的分配数据:

ImageView image = (ImageView)view.findViewById(R.id.imageView);
TextView title = (TextView)view.findViewById(R.id.txtTitle);

new DownloadImageTask(image).execute(data.image);
title.setText(data.title);

我应该怎么做不同?

Answer 1:

除了什么Forin说,有许多图书馆,真正帮助了上这样的事情。 我此刻的个人最喜欢的是AQuery:

https://code.google.com/p/android-query/

比方说,你有一个ImageView的,你想下载的图像和设置的ImageView来保存图像。 听起来有点困难吧? 随着AQuery这是在一个行来完成:

aq.id(R.id.name_of_image_view).image("http://url-of-image.com/image.png");

aq在这种情况下,宣布了以下这样一个AQuery对象:

AQuery aq = new AQuery();


Answer 2:

首先,你应该重新考虑使用这个库:

https://github.com/nostra13/Android-Universal-Image-Loader

它会帮助你下载图像,并在ListView中显示它们。

你的问题与ListView中回收的意见连接。 所以,你在getView ImageView的()被再利用,这就是为什么在列表中的位置正在发生变化。 如果您使用的持有人,并有类似holder.image.setImageDrawable(...)里面if/else语句,你应该将它的外部条件,略高于return



文章来源: Android Async loading Images in Listview - images are blinking