기존에 쓰는 방식은 getView시에 inflate 하여 ImageView를 findVIewById 하여 생성한 후

 

웹 다운로드 이미지 쓰레드를 돌려서 다운이 완료되면 setImage를 시키고 이미 해당 position의

 

Drawable이 다운로드되어 저장 되어 있는 경우(HashMap에서 url을 key로 사용하고 Drawable을 value로 사용 하여 검색)

 

받아둔 Drawable을 setIamge 하도록 되어있습니다...

 

이 방식의 문제점은 해당 ImageView가 없는 row도 있고 있는 row도 있어서 Visible은 GONE으로 xml을 작성하였고

 

이 이미지를 보여줘야 할 때만 Visible을 VISIBLE로 해주고 이미지 다운로드 쓰레드를 돌리도록 구현되어 있습니다..

 

문제는 이 ImageView가 row의 높이를 결정짓는다는 것입니다....

 

getView가 호출될땐 기본 visible이 GONE이라서 row의 높이가 짧다가 이미지가 다 받아지면 visible이 VISIBLE로 되면서

 

높이가 훅~ 늘어나면서 이미지가 뜨는겁니다....

 

그래서 이미지를 보여줘야 할땐 visible을 VISIBLE로 먼저 바꿔주고 이미지 다운로드 쓰레드를 돌리게 했음에도 불구하고

 

스크롤이 될때 row가 푹 푹 늘어나면서 위로 튀는 현상이 유지되네요....

 

그리고 public View getView(int position, View contentView, ViewGroup arg2) 함수에서 두번째 파라미터 View contentView를 사용하지 않았었는데

 

이 View를 활용하면 좀 더 ListView를 최적화 할 수 있다고 해서 써봤더니 이것도 View를 재사용 하는 방식이라

 

레이아웃은 같지만 컨텐츠가 다른게 떠서 결국 setImage, setText 등등의 컨텐츠는 어차피 새로 셋팅을 해야하더라구요

 

그래서 이미지 쓰레드를 getView 시마다 호출되게 구현하였더니 이전에 쓰였던 이미지가 먼저 보이고 0.몇 초 후에 해당 position의

 

이미지가 뜨는 현상이 있더라구요... ㅠ_ㅠ

 

ListView와 getView.... 이거 어떡해야 제대로 만들 수 있으까요...

 

한번 불러온 이미지는 꼭 거기에 박혀있는 것처럼 깜빡 거리지도 않으면서 부드럽게 스크롤 되길 원하는데....

 

그게 잘 안 되네요...

 

 

 

 

위의 문제들이 있어서 ArrayList mViews를 생성하여 View들을 만들어서 이 어레이에 다 넣어두고

 

getView에서는 mViews.get(position)으로 View만 불러와서 return 하게 하였더니 제가 원하는대로 한 번 로딩된 이미지는

 

화면에서 벗어났다 나타나도 깜빡 거리지 않으며 그 자리에 박혀있는 느낌이 들며 row의 높이도 휙휙 변하는 느낌이 들지 않는

 

완벽한 뷰를 제공하지만 이렇게 될 경우 100개의 View를 붙이게 되면 100개의 View를 다 갖고 있게 되는 메모리 문제가 발생되고...

 

화면에서 벗어난 이후 다시 getView가 호출 됐을때 setOnclickListener를 해둔게 잘 작동이 안 하는것 같기도 하고.. .무튼 이 방식은

 

피해야 할것 같은데... 어찌 해야할지 모르겠네요....

 

아니면 이 방식을 쓰면서 ListView를 쓰지 않고 그냥 ScrollView를 써서 LinearLayout에 addView로 붙여주는게 나을까요..? 근데 이것도

 

메모리 문제는 해결이 안 되는것 같네요.... ㅠ_ㅠ