ExpandListView 多个ItemView的效率优化

8 篇文章 0 订阅
4 篇文章 0 订阅

最近在项目遇到一个问题,就是在ExpandListView中有多个ItemView和groupView 每次都需要初始化,这个效率只能呵呵了!思路是如此出发的!

以前我们使用在一个Listview只有单个itemView优化如下!

[java] view plaincopy在CODE上查看代码片派生到我的代码片

FitListViewHolder viewHolder;  
    if (convertView == null) {  
        convertView = LayoutInflater.from(context).inflate(  
                R.layout.fitlistitem, null);  
        viewHolder = new FitListViewHolder(convertView, context);  
        convertView.setTag(viewHolder);  
    } else {  
        viewHolder = (FitListViewHolder) convertView.getTag();  
    }  

    // 装载数据  
    viewHolder.setContent(yiLists.get(position)); 

大部分人应该都是这么处理的,我也是这样处理的!
一次类推如果为多个责直接扩展为:

[java] view plaincopy在CODE上查看代码片派生到我的代码片

if (symptomResultType == SymptomResultType.SYMPTOM_TYPE_COMMON_METHOD) {  
           CommonMethodViewHolder viewHolder;  
           判断缓存是不是原来的那个,不是的话重新缓存
           if(convertView == null **|| !(convertView.getTag() instanceof CommonMethodViewHolder)**) {  
               convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_common_method, null);  
               viewHolder = new CommonMethodViewHolder(convertView, mContext);  
               convertView.setTag(viewHolder);  
           }else{  
               viewHolder = (CommonMethodViewHolder) convertView.getTag();  
           }  
           Object[] userMethods = userSymptomResultModel.userMethodDatas.toArray();  
           viewHolder.setMethodContent((UserMethod) userMethods[childPosition]);  
           return convertView;  
       } else if (symptomResultType == SymptomResultType.SYMPTOM_TYPE_HABIT) {  
           UserHabitViewHolder viewHolder;  
           if(convertView == null || !(convertView.getTag() instanceof UserHabitViewHolder)) {  
               convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_habit, null);  
               viewHolder = new UserHabitViewHolder(convertView, mContext);  
               convertView.setTag(viewHolder);  
           }else{  
               viewHolder = (UserHabitViewHolder) convertView.getTag();  
           }  
           Object[] userHabits = userSymptomResultModel.userHabitDatas.toArray();  
           viewHolder.setHabitContent((UserHabit) userHabits[childPosition]);  
           return convertView;  
       }  

中心思想就是根据contentView是否为空或者不为空的情况下获取gettag然后看看是否是当前item需要的View,如果不是责再去创建。根据tag去获取就OK了!
debug执行了我想要的结果!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值