제가 그리드 뷰에 어플 목록을 출력해서 체크박스 얹어놓고 체크가 된 어플들의 명만 db에 저장 하려고 하는데요 일단 그리드뷰에 체크박스 얹는것 까지는 했는데 체크상태도 스크롤에 따라서 뒤죽박죽 되고 있습니다. 도통 체크박스에 체크상태에 따라사 체크된 어플 명을 가져올 방법을 모르겠어요 많이 찾아 봤지만 마땅한 답을 찾지 못했습니다. 고수님들 도와주세요. 참고할 수 있는 자료가 없을까요? 제발 부탁드립니다. ㅠㅠ
스크롤에 따라서 체크박스가 뒤죽박죽되는건 99프로 convertView 문제입니다. 제가 해결했던 방식(성능상의 이슈에서는 불완전한 방법일 수도 있습니다.)으로 장문의 댓글을 쓰다가 지웠습니다. 어짜피 이곳저곳 코딩으로 설명을 드려도 이해하기도 힘들뿐더러, 모바일짱님 실력을 키우기에도 도움이 전혀 안될것같아서요.. 약간의 힌트만 드리자면...
adapter안에서 arrayList로 boolean하나 인스턴스 변수 선언해주시고 어플목록 초기에 받아서 array에 넣을때마다 이것도 같이 추가해주세요
그리고 getView에서 if(convertView == null) 제어문 밖에(제어문 아래) 체크박스 선언해주시면 화면에 보여지는 convertView마다 체크박스를 코딩상에서 제어할 수 있겠죠. 다음에 체크박스.setTag로 position을 넣어주시고 리스너등록 마지막으로 리스너의 onCheckedChange 메쏘드 오버라이드하실때 위에 매개변수로 들어오는 buttonView, isChecked를 이용해서 위에 선언 arrayList boolean형을 set(buttonView.getTag(), true/false) ...
이렇게하면 어플명의 arrayList와 boolean arrayList가 index로 일치하게 되고 체크상태도 리스너에서 처리를 해주어서 동기화(?)되게 되는거죠. 더 좋은방법은 처음부터 그리드뷰에 표시될 어플명(String이겠죠)과 checked boolean 를 포함한 class를 선언해서 사용하는거구요.
2011.04.06 09:56:01
모바일짱
포도맛카라님 답변 감사드립니다. 이제야 뭔가 조금 풀릴수 있는 힌트를 얻은 것 같네요 ㅎㅎ
제가 해결했던 방식(성능상의 이슈에서는 불완전한 방법일 수도 있습니다.)으로 장문의 댓글을 쓰다가 지웠습니다. 어짜피 이곳저곳 코딩으로 설명을 드려도 이해하기도 힘들뿐더러, 모바일짱님 실력을 키우기에도 도움이 전혀 안될것같아서요..
약간의 힌트만 드리자면...
adapter안에서 arrayList로 boolean하나 인스턴스 변수 선언해주시고 어플목록 초기에 받아서 array에 넣을때마다 이것도 같이 추가해주세요
그리고 getView에서 if(convertView == null) 제어문 밖에(제어문 아래) 체크박스 선언해주시면 화면에 보여지는 convertView마다 체크박스를 코딩상에서 제어할 수 있겠죠.
다음에 체크박스.setTag로 position을 넣어주시고 리스너등록
마지막으로 리스너의 onCheckedChange 메쏘드 오버라이드하실때 위에 매개변수로 들어오는 buttonView, isChecked를 이용해서 위에 선언 arrayList boolean형을 set(buttonView.getTag(), true/false) ...
이렇게하면 어플명의 arrayList와 boolean arrayList가 index로 일치하게 되고 체크상태도 리스너에서 처리를 해주어서 동기화(?)되게 되는거죠.
더 좋은방법은 처음부터 그리드뷰에 표시될 어플명(String이겠죠)과 checked boolean 를 포함한 class를 선언해서 사용하는거구요.