마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

배달의민족처럼 listview에서 스크롤 시 default 이미지를 먼저 표기한 후 webivew에서 이미지 다운 받아 보여주는 방법 질문드립니다.

0 추천

현재 리스트뷰를 만들고 있는데요. 리스트뷰의 해당 아이템들을 getview에서 webview로 보여주는 중입니다.

 

궁금한 점은 배달의민족을 보면 스크롤을 내리면 default 이미지를 먼저 보여주고 이후에 이미지를 넣어서

보여주는 방식을 사용하는데(쿠팡도 마찬가지) 이런 방식을 구현하려면 어떻게 해야 하는지 잘 몰라서

고수님들에게 부탁드립니다. getview recycle, getview 재사용 등의 키워드로 구글링을 해도 잘 나오지

않네요ㅠ 어떤 식으로 알아봐야 하는지 키워드만이라도 알려주시면 정말 감사하겠습니다!ㅎ

 

현재 listview의 getview를 사용할 때는 5개의 리스트를 보여주는 화면에서

1-5번째 리스트를 보여주고 스크롤해서 6번째 이미지를 보여주면 1번 이미지가 6번 자리에 잠깐

생겼다가 사라지는 문제가 발생하고 있습니다.

해당 문제의 원인은 getview의 재사용 문제임을 알았고 이를 배달의민족처럼 default 이미지를

먼저 보여주면 해결할 수 있을 듯하여 질문 드립니다.

 

 

참고이미지 - 배달의민족

뿌요뿌요 (1,350 포인트) 님이 2015년 11월 11일 질문

2개의 답변

0 추천
 
채택된 답변
View를 재 생성하기 때문에 깜박이는 이슈가 많이 발생합니다. 이런 경우에는 getView 메서드에서 ViewHolder에서 ImageView에 바로 디폴트 이미지를 set 하시면 됩니다. 이런식으로 하시면 빠르게 그려지기 때문에 깜박이지 않게 됩니다.

안드로이드 리스트뷰등에서 이미지뷰의 이미지는 LruCache를 사용해서 1차 메모리, 2차 디스크의 형태로 캐시해서 빠르게 처리하도록 구현하는 형태가 많이 사용되고 있습니다.
mcsong (44,040 포인트) 님이 2015년 11월 11일 답변
뿌요뿌요님이 2015년 12월 9일 채택됨
말씀해주신 부분에 헷갈리는 내용이 있어서 아래처럼 진행하였는데 되지 않았네요ㅠ 조금 더 구체적으로 말씀해주실 수 있나요?

진행한 방법들
1. getView 메서드 내에서 convertView == null 일 때 ViewHolder를 선언하며 default image를 초기값으로 설정
-> 리스트뷰 스크롤 시 재사용을 하여 스크롤 시 default image가 나오지 않고 기존의 이미지들이 계속 뜹니다.
2. holder를 전역변수로 설정 후 ViewHolder 메서드 내에서 holder의 이미지를 default image로 지정
-> 웹뷰의 이미지를 loadDataWithBaseURL로 불러오는데 loadDataWithBaseURL 구문에 빨간색으로 되어 진행되지 않습니다.

감사합니다.
ViewHolder 패턴을 잘 못 사용하시는 것으로 보입니다.
convertView가 != null 때 디폴트 이미지를 바인딩해야 합니다.

그리고 웹뷰를 사용하시게 되면.. ViewHolder 패턴을 사용하지 않는게 좋을 것 같습니다. 만약 사용하신다면 별도의 스레드로 view를 show, hide 하면서 복잡하게 핸들링 해야 합니다.
0 추천
lazy lisview나 lisview lazy loading으로 검색해보세요.

 
보통은 쓰레드로 돌려서 다운받는 순서대로 getView에 셋팅되도록 하는 원리입니다.

 

질문을 다시읽어보니 이미지를 갖고오는데 다른 포지션에서 이미지가 잠깐 나타났다 사라진다는 문의인거같은데..

 

이경우는 이미지를 디폴트로 놓고 하나씩 가져오는 방법을 문의하실게아니라

애초에 설계를 잘못해서 다른이미지가 다른포지션에 나오는겁니다.

 

리스트뷰 홀더 패턴 모르시겠으면 그냥 쓰지마세요. 리소스차이 얼마안나고 잘못쓰면꼬입니다

 

1. 홀더패턴 없애고 그냥 다이렉트로 불러온다.

2. 이미지는 보통 lazy패턴으로 많이 불러오니까 어찌됫건 lazy는알아보세요.
초보자 님이 2015년 11월 11일 답변
...