可适配图片的ExpandableListView

 

导读:需要实现一个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) {
02        int len = to.length;
03 
04        for (int i = 0; i < len; i++) {
05            TextView v = (TextView)view.findViewById(to[i]);
06            if (v != null) {
07                v.setText((String)data.get(from[i]));
08            }
09        }
10    }
我靠,这个SimpleExpandableListAdapter也太Simple了吧,竟然吧所有的View都当做TextView来处理了,一点都没有他的兄弟SimpleAdapter的风范,想当年,SimpleAdapter可以自动判断View的类型,自动绑定,实在不得,还给你个ViewBinder...咋地名字差不多,但是能力差这么多捏...-_-|||... 不得,虽然这里可以不用ExList用ListView自己渲染也可以,但这回不得,下次还不是不得?诶,自己改造一个!,于是开工 这第一次我们简单点,就使用个ViewBinder回调一下就得了,下次再来弄自动绑定的
01public class MyExpandableListAdapter extends BaseExpandableListAdapter{
02        private void bindView(View view, Map<String, ?> data, String[] from, int[] to) {
03                int len = to.length;
04 
05                boolean isBound = false;
06                for (int i = 0; i < len; i++) {
07 
08                        final View v = view.findViewById(to[i]);
09 
10                        if (v!=null) {
11                final Object _data = data.get(from[i]);
12                String text = _data == null ? "" : data.toString();
13                if (text == null) {
14                    text = "";
15                }
16                                 
17                                if (mViewBinder != null) {//如果Binder不为空,使用Binder进行处理
18                                        isBound = mViewBinder.setViewValue(v, data.get(from[i]), text);
19                                }
20                                 
21                                if (!isBound) {//如果Binder跳过,使用原来的方法进行处理
22                                        TextView _v = (TextView)v;
23                                        _v.setText((String)data.get(from[i]));
24                                }                               
25                        }
26                }
27        }
28}

ok,Activity中在ViewBinder一下,这里不贴了,上图:

     \    

 http://www.eoe.cn/uploadfile/2011/1202/20111202015609158.zip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值