2014-10-08 91 views
1

我一直在ListView中异步加载图像,因为当它们加载时,它们中的一些闪烁(它们被另一个加载的图像替换)以及一些他们显示在错误的项目。Android异步加载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); 

我应该怎么做不同?

+1

发表您的适配器代码! – mmlooloo 2014-10-09 02:36:02

回答

0

除了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(); 
0

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

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

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

您的问题与ListView中的回收视图有关。所以你的ImageView在getView()中被重用,这就是为什么你的列表中的位置正在改变。如果您使用持有人并在if/else声明中使用类似holder.image.setImageDrawable(...)之类的内容,则应将其移至条件之外,稍高于return