현재 상황은 리스트뷰 사용시 제가 정의한 어댑터를 사용 중이고, 어댑터는 BaseAdapter 를 상속받고 있습니다.

getView 메서드에서는 setOnCheckedChangeListener 를 정의하였고, 해당하는 체크박스에 리스너를 걸었습니다.

그리고 리스너에는 notifyDataSetChanged() 를 사용하는 부분이 있습니다.

이러한 상황에서 실행시, 리스트 뷰의 체크를 변경하면 리스트뷰의 체크가 변경되면서 리스너를 실행시키고,

그 리스너에서는 notifyDataSetChanged 메서드를 실행시킵니다. 여기서 문제가 있는데요.

notifyDataSetChanged 메서드가 실행되면서 전혀 무관한 position 의 아이템의 리스너가 실행이 됩니다.

실행이 되면서 해당 체크로 분기하는 로직을 그대로 타버립니다.

예를 들면 0 ~ 6 번까지 인덱스가 있다면,

6번 아이템 내부의 값을 변경한 후 0번 인덱스의 체크를 변경하면 6번 아이템에서 OnCheckedChangeListener 가 실행되버려서

해당하는 로직을 탄 후 값이 변경되는 현상입니다. 그 6번이 체크가 변경이 안된 상황인데도 체크리스너가 실행이 되는 상황

입니다. (참고로 꼭 0 번과 6번이 아니라 여러번 해보면 2 번 3번 , 1번 5번, ... 해서 딱 두개의 아이템만이 연결된 듯 움직입니다)

이 0번과 6번이 무슨 관계가 있는 건 아닐건데 0번 아이템에서 체크를 변경한 후 실행되는 notifyDataSetChanged () 에 의해

6번에서 OnCheckedChangeListener 가 실행되는 것은 도대체 원인을 짐작하기 힘드네요.

안드로이드의 리스트뷰는 쉽게 쓰면 참 쉽고, 어렵게 쓰려면 한없이 어려워지는 것 같습니다. 참 리스트뷰 땜시 골치가 아프네요 ;;;;

위의 문제와 비슷한 경험을 해보셨던 분이나 원인이 짐작 가시는 분들의 조언을 구하고 싶습니다.

글을 장황하게 작성해서 혹 읽기 힘드실까 걱정되네요 ...

함 돠주십쇼~~

안드로이드 캐발자 인사드리옵니다


잘 부탁드려요~