2012-10-06 3 views
2

첫 번째 앱을 개발 중이며 여기를 많이 읽었습니다.스크롤하는 동안 listview에 이미지를 다운로드하여 보관하십시오.

나는 한 주 동안 다음 호에 대한 해결책을 찾기 위해 노력해 왔습니다. 이미지를 표시하기 위해 ArrayAdapter을 확장하고 각 행에 3 줄의 텍스트를 표시하는 Adapter이 있습니다. getView 안에 TextView에 대한 관련 정보를 할당하고 ImageLoader 클래스를 사용하여 이미지를 다운로드하고 ImageView에 할당합니다.

모든 것이 효과적입니다. 내 화면에 4.5 행이 표시됩니다 (총 20 개). 처음으로 아래로 스크롤하면 이미지가 계속 다운로드되고 목록에 올바른 순서로 지정됩니다.

그러나 목록을 뒤로 스크롤하면 모든 이미지가 손실되고 올바른 순서로 이미지를 다시 그리기 시작합니다 (이미지 당 0.5-1 초). 내가 읽은 바로는 표준 목록 성능이지만 변경하고 싶습니다.

일단 이미지가 다운로드되면 현재 창 전체 세션의 목록에 "고정"됩니다. 연락처 목록이나 마켓처럼. 단지 20 이미지 (각각 6-9kb)입니다.

나는 자신을 설명 할 수 있었으면 좋겠다.

답변

2

각 이미지를 다운로드 한 후 캐시해야하며, 어댑터가 필요할 때마다 이미 다운로드되었는지 캐시 (디스크 또는 메모리)에서 확인하십시오. 그렇지 않으면 다운로드하십시오.

처음에는 내가 http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

안드로이드 dev에 사이트에서이 튜토리얼을 읽거나 ArrayAdapter와 당신으로 목록보기 행을 재사용되는 것을 여기 하나 https://github.com/koush/UrlImageViewHelper

+0

감사합니다. dev 사이트를 살펴보고 내 예제를 다운로드하여 실수를 이해하려고했지만 현재의 개발 기술 (예를 들어 언급 한 것처럼 첫 번째 앱을 개발 중입니다. 이전 자바 경험이 없다는 것을 언급하지 않았습니다). 그래서 당신이 준 외부 lib를 사용하는 것으로 끝났습니다. 매력처럼 작동합니다! – Paveliko

0

문제와 같은 외부 lib 디렉토리를 사용하도록 권장 스크롤을 사용하여 아래로 스크롤하면 상단 행이 재사용되고 목록 하단에 삽입됩니다 (성능상의 이유로).

매번 ImageLoader를 호출하지 않도록 이미지를 기기에 로컬로 캐시 해보는 것이 가장 좋습니다.

이 문제를 해결하는 아주 좋은 라이브러리는 점화입니다. 오픈 소스이며 여기에서 이용 가능합니다 : https://github.com/kaeppler/ignition

캐싱 메커니즘의 좋은 예를 보려면 RemoteImageView을보십시오.

+0

고맙지 만 위의 해결책에 대한 답변에서 말했듯이 다른 캐싱 메커니즘을 이해하는 것은 여전히 ​​어렵습니다 .. 내가 제안한'RemoteImageView' 클래스를 이해하려고 시도한 몇 분 후에 저는 지금 포기했습니다 - 나는이 문제를 더 잘 알기 위해 되돌아 올 것이지만 지금은 그렇지 않다. – Paveliko

관련 문제