0

내 응용 프로그램 (트위터 종류의 응용 프로그램)에서 이미지의 지연로드 (원격 서버에서)를 구현했으며 이미지 가져 오기 부분을 정확하게 imageView에로드하면 완벽하게 정상적으로 작동합니다. 하지만 어댑터의 "getView"부분은 ListView를 스크롤 한 후에 만 ​​호출되므로 이미지가 원격 서버에서 가져옵니다 (어댑터 "getView"코드 내에서 asyntask를 실행하여 이미지를 가져옵니다). 스크롤 한 후에 만 ​​스크롤하면됩니다. 로드되는 이미지에 상당한 지연이 있음을 알 수 있습니다. 이미지가로드되고 메모리 캐시에 저장되면 위 또는 아래로 스크롤하는 동안 아무런 문제가 없습니다. 유일한 문제는 느린 로딩을 처음로드하는 이미지입니다.LIstView에서 이미지가 느리게 로딩 됨

그래서 내가 스크롤 할 때까지 이미지 비트 맵을 얻을 수 있어야하고 비트 맵을 설정할 수있는 방법으로이를 수정할 수있는 방법이 있습니다. 나는 아래로 스크롤한다. 프로필 사진을로드하는 데 지연이없는 지저귐 앱과 정확히 같아야합니다.

보기 당신이 더 그렇게 할 때마다이 서비스가 호출되는 목록을 스크롤 가져올 때마다 호출되는대로 TIA가

답변

0

당신의 접근 방식은 당신이 그들을 표시하기 전에 모든 이미지를 가져가 올바르지 않습니다. 목록이 화면에 표시 할 수있는 이미지 수 (한 번에 4-5).

당신이해야 할 일은 다음과 같습니다. - 1) 모든 이미지 가져 오기. 모든 이미지가 목록보기에 어댑터를 설정하고 이미 이미지를 다운로드 한 당신이 어떤 지체없이 귀하의 목록에있는 모든 이미지를해야합니다 가져 오기로 2),

을하지만이 지연로드되지 않습니다 - 게으른 로딩 사용자를 의미합니다 스크롤하지 않으면 한 번에 일부 이미지 만 보게되어 서비스에서 이미지를 다운로드 할 필요가 없습니다. 당신의 getView() 메소드에서 웹 서비스를 호출 할 경우

+1

답장을 보내 주셔서 감사합니다. 내 앱은 10 개의 피드를 가져오고 사용자가 아래로 스크롤하면 계속 가져올 수있는 트위터 앱과 같습니다. 그래서 이미지 URL을 스크롤 할 때만 – Jagadeesh

+0

이미지를 가져 오려면 부분적으로 이미지를 가져 오면 이미지 다운로드 시간을 무시할 수 없으므로 getview에서 지연이 발생합니다. 어댑터에 전달하기 전에 모든 이미지를 가져와야합니다. –

+0

정확하지 않은 경우 position + 10 이미지를로드하고 캐싱하여 아래로 스크롤하면 이러한 이미지가 표시되고 목록의 이미지 위치 + 10에 대한 새로운 webservice 호출이 발생합니다. 모든 이미지를 검색하는 것은 목록이 거의 무한한 트위터와 같이 많은 경우에 효율적이지 않습니다. 내 대답을 보라. – NickL

0

도움이 될 것입니다

희망, 그것은 당신이 아래로 스크롤 할 때마다 호출됩니다. getView 메소드는 화면에 표시되는 행에 대해 호출되므로

당신이 할 수있는 일은 HashMap<int, Object>에 이미지를로드하는 것입니다. 여기서 int == listview의 위치이고 object는 이미지입니다. getview에서 position + (1 -> 10)이로드되었는지 확인하고, 그렇지 않은 경우 백그라운드 작업으로 웹 서비스에서 검색합니다. 이미지를 해시 맵에로드하고 getView() 메소드가 해당 이미지를 사용하도록합니다. 웹 서비스에서 직접 가져온 이미지가 아닙니다. 그렇지 않으면 실제로 검색 할 때까지 기다려야합니다. 또한 위와 같은 방법으로 위와 아래로 스크롤 할 때 동일한 이미지를 반복적으로 검색하는 대신 해시 맵에서 이미지를 캐시합니다.

물론 이러한 어댑터를 만든 사람이 있습니다. 여기에서 검색하면 this입니다.이 질문에 대한 답변은 CommonsWare endless adapter입니다.

0

목록보기를 지연로드하는 데 도움이되는 AALP라는 라이브러리가 있습니다. https://bitbucket.org/zedvoid/aalp/src 그러면 시간과 노력을 절약 할 수 있습니다.