2010-02-19 3 views
1

Romain Guy의 효율적인 어댑터 샘플에 따라 ListView에 대한 사용자 지정 어댑터를 사용하고 있습니다. 나는 다음과 같은 코드를 사용하여 JPG 이미지는 SD에 저장된 이미지 뷰를 할당하고 내 어댑터의 getView() 메소드에서 SD에서 ListView로 이미지를로드 할 때 ListView 효율성 향상

:

File f=new File(MovieThumbs.get(position)); 

if(f.length() > 0) { 
    holder.thumb.setImageBitmap(BitmapFactory.decodeFile(MovieThumbs.get(position))); 
} 

이 방법을 응용 프로그램을 사용하여 약 200 항목의 목록을 쓸어 넘겨 그것이 이미지를 다루려고 노력할 때 말더듬이가 좋지 않습니다.

더 효율적인 해결책이 있습니까?

답변

0

이미지는 백그라운드 스레드에서 처리해야합니다. 재활용 된 견해를 고려해야합니다. 내 예제 코드에서 이러한 모든 문제를 해결하기 위해 노력하고있어, 지금은 괜찮아요, 당신은 볼 수 있습니다 Lazy load of images in ListView

1

필요에 따라 목록 어댑터에서 이미지를로드하는 대신 활동의 onCreate에서 이미지를로드하는 스레드를 시작하는 방법은 무엇입니까? 각 이미지가로드 될 때 활동에 대한 콜백을 시작하여 목록에 이미지를 표시 할 수 있습니다. 콜백 메소드는 다음 행을 따라 표시됩니다.

void onImageDownloadComplete(int pos, BitMap bm) { 
    ListView lv = getListView(); 
    View listItem = lv.getChildAt(pos); 
    ImageView img = (ImageView)listItem.getChildAt(indexOfIcon); 
    img.setImageBitmap(bm); 
} 
+1

어댑터의 getView 메서드는보기의 재활용을 사용하는 경우 실패합니다. 잘못된 비트 맵을 잘못된 위치에 설정합니다. 목록에 200 개의 항목이 있으면 메모리를 절약하기 위해 재활용을 사용합니다. –

관련 문제