2013. 5. 30.

Listview - Header / Footer view IndexOutOfBoundsException (진저이하)

진저브레드 이하에서 Header view와 Footer view를 사용할 경우 아래처럼
IndexOutOfBoundsException이 발생하는 경우가 생긴다..

E/AndroidRuntime(11497): FATAL EXCEPTION: main
E/AndroidRuntime(11497): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
E/AndroidRuntime(11497): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
E/AndroidRuntime(11497): at java.util.ArrayList.get(ArrayList.java:311)
E/AndroidRuntime(11497): at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
E/AndroidRuntime(11497): at android.widget.ListView.dispatchDraw(ListView.java:3062)
E/AndroidRuntime(11497): at android.widget.ExpandableListView.dispatchDraw(ExpandableListView.java:233)
E/AndroidRuntime(11497): at android.view.View.draw(View.java:7093)
E/AndroidRuntime(11497): at android.widget.AbsListView.draw(AbsListView.java:2699)
E/AndroidRuntime(11497): at android.view.ViewGroup.drawChild(ViewGroup.java:1739)
E/AndroidRuntime(11497): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
E/AndroidRuntime(11497): at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
E/AndroidRuntime(11497): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
E/AndroidRuntime(11497): at android.view.View.draw(View.java:6989)
...


발생 원인은
어댑터가 가지고 있는 아이템의 갯수가 줄어들었을 때,
HeaderView와 FooterView를 핸들링 하기 위해 안드로이드 내부적으로 가지고 있는 HeaderViewListAdapter 의 count가 같이 변경되지 못해 발생하는 것으로

안드로이드 프레임 웍에서 onDraw 호출 시 HeaderViewListAdapter의 getCount()를 호출하여 아직 갱신되지 않은 아이템 갯수를 받아가기 때문에 발생한다.

따라서 아이템의 갯수가 변경되면 그 즉시 notifyDataSetChanged()를 호출하여 HeaderViewListAdapter의 getCount()를 갱신해 주면 해결이 가능하다.

...젠장.. 어렵구만...

2013. 5. 15.

Listview - Headerview item visibility 변경

Listview에 헤더뷰를 추가 하였을 때,
추가한 view의 visibility를 gone으로 하여도 영역이 남는 문제는 어떻게 해결할까...

간단히
추가할 뷰(a)를 LinearLayout으로 감싼 후 HeaderView로 추가하고,
a의 visibilitiy를 변경하면 됨.

참고자료 :
http://pivotallabs.com/android-tidbits-6-22-2011-hiding-header-views/

[다자녀할인] 2자녀 이상 모든 공항 주차장 50% 할인받기 (둘 중 한명은 15세 이하)

다자녀 기준이 2명으로 완화되면서 자녀가 2명만 되어도 공영주차장 50%(지역에 따라 30%인 곳 도 있음) 할인이 가능하고, 전국의 공항주차장도 50% 할인이 가능하다. "다둥이카드" 나 "경기 I Plus 카드"...