导读:需要实现一个2级树,很不幸的是这颗2级树的Group,就是第一级上有个ImageView,我按照SimpleAdapter的套路把图片的id搞上去
今天需要实现一个2级树,很不幸的是这颗2级树的Group,就是第一级上有个ImageView,我按照SimpleAdapter的套路把图片的id搞上去发现死活都在抛错:
12-04 06:09:36.228: ERROR/AndroidRuntime(324): java.lang.ClassCastException: android.widget.ImageView
根据堆栈来看竟然是SimpleExpandableListAdapter内部出了错,错在转型上,于是跟进去,发现了这段代码:
01 | private void bindView(View view, Map<String, ?> data, String[] from, int [] to) { |
04 | for ( int i = 0 ; i < len; i++) { |
05 | TextView v = (TextView)view.findViewById(to[i]); |
07 | v.setText((String)data.get(from[i])); |
我靠,这个SimpleExpandableListAdapter也太Simple了吧,竟然吧所有的View都当做TextView来处理了,一点都没有他的兄弟SimpleAdapter的风范,想当年,SimpleAdapter可以自动判断View的类型,自动绑定,实在不得,还给你个ViewBinder...咋地名字差不多,但是能力差这么多捏...-_-|||... 不得,虽然这里可以不用ExList用ListView自己渲染也可以,但这回不得,下次还不是不得?诶,自己改造一个!,于是开工 这第一次我们简单点,就使用个ViewBinder回调一下就得了,下次再来弄自动绑定的
01 | public class MyExpandableListAdapter extends BaseExpandableListAdapter{ |
02 | private void bindView(View view, Map<String, ?> data, String[] from, int [] to) { |
05 | boolean isBound = false ; |
06 | for ( int i = 0 ; i < len; i++) { |
08 | final View v = view.findViewById(to[i]); |
11 | final Object _data = data.get(from[i]); |
12 | String text = _data == null ? "" : data.toString(); |
17 | if (mViewBinder != null ) { |
18 | isBound = mViewBinder.setViewValue(v, data.get(from[i]), text); |
22 | TextView _v = (TextView)v; |
23 | _v.setText((String)data.get(from[i])); |
ok,Activity中在ViewBinder一下,这里不贴了,上图:
http://www.eoe.cn/uploadfile/2011/1202/20111202015609158.zip