2014-10-08 107 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