모바일/Android

안드로이드 ExpandableListView 사용시 주의할점.

늘근이 2017. 1. 13. 22:33

이게, 보통처럼 Acitivity에서 setOnItemListener와 같은 걸 걸수가 없다. 

그래서 여지없이 아답타에들어가서 getView가 호출시 하나하나 setOnCheckedChangeListener를 걸어주어야 하는데, 이게 상당히 귀찮다. 

다만 아래와 같은 문제가있을수있다.

1) 아무거나 클릭하고 저장했는데 다음에 들어와서는 엉망진창으로 랜덤하게 저장할경우.

왜냐면 안드로이드가 레이아웃인플레이트하는 자원이 상당하기 때문에 다시 재활용하게끔 되어있는데, 화면에 보이는건 정상적이여도 convertView가 계속해서 재활용되고있기 때문에 내부적으로 내용이 바뀌고 있다. 

OnCheckedChangedListener 안의 OnCheckedChaged 메서드에서 다시한번, getChild()를 콜해주도록 한다.

Item item = getChild(groupPosition, childPosition);

이 이너클래스에 존재하고 있어야한다는 것이다. 물론 저 위의 인자는 final로 선언해야 쓸수있다.


2) 아래로 갔다가 다시 위로 가면 체크가 풀려져 있는경우.

막 위로 갔다 아래로 갔다 하면 안드로이드는 시도때도없이 재활용하며 getChildView를 호출한다. 굉장히 짜증나는데, 이는 간단하게 setOnChckedChangedListenre 아래에 setChecked메서드를 위치시키면 된다.

http://stackoverflow.com/questions/5444355/android-listview-with-checkbox-problem

폭발적인 대답이다. 전세계인은 나와같은 고통을 느끼고 있었다.


코드는 많이 없는데 github에서 아래와 같은걸 참조한번 해본다.

https://github.com/bhat-dinesh/ExpandableListViewWithCheckBox

문제가 좀 있는데, isChildSelectable 을 true로 해주고 돌리면된다.