2014-10-08 3 views
1

로드하는 동안 깜박임 (다른로드 된 이미지로 대체 됨) 및 일부가로드 됨으로 ListView에서 이미지를 비동기 적으로로드하는 데 어려움을 겪고 있습니다. 잘못된 항목에 표시됩니다. 다운로드 이미지Android Async loading 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

답변

0

Forin이 말한 것 외에도 실제로 이런 일을 돕는 많은 라이브러리가 있습니다. 순간 나의 개인의 마음에 드는 사람은 AQuery입니다 :

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

의 당신이 이미지 뷰를 가지고 이미지를 다운로드하고 해당 이미지를 유지하기 위해 이미지 뷰를 설정하기를 원하는 경우를 생각 해보자. 일종의 어려운 소리 죠? 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의 재활용보기와 관련이 있습니다. 따라서 getView()의 ImageView가 재사용되므로 목록의 위치가 변경되는 이유입니다. 홀더를 사용하고 holder.image.setImageDrawable(...) 문안이 if/else 문 안에 있으면 return 바로 위의 상태로 이동해야합니다.