ExpandListView 多个ItemView的效率优化
2015-12-02 16:16
351 查看
最近在项目遇到一个问题,就是在ExpandListView中有多个ItemView和groupView 每次都需要初始化,这个效率只能呵呵了!思路是如此出发的!
以前我们使用在一个Listview只有单个itemView优化如下!
[java] view plaincopy在CODE上查看代码片派生到我的代码片
大部分人应该都是这么处理的,我也是这样处理的!
一次类推如果为多个责直接扩展为:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
中心思想就是根据contentView是否为空或者不为空的情况下获取gettag然后看看是否是当前item需要的View,如果不是责再去创建。根据tag去获取就OK了!
debug执行了我想要的结果!
以前我们使用在一个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执行了我想要的结果!
相关文章推荐
- iOS --- block的一些使用方法(反向传值)
- Android Studio系列教程四--Gradle基础
- js对象属性 通过点(.) 和 方括号([]) 的不同之处
- 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用
- 最长递增子序列
- Apache CXF实现Web Service(3)——Tomcat容器和不借助Spring的普通Servlet实现JAX-RS(RESTful) web service
- C语言宏的特殊用法和几个坑
- [Javascript Data Structures] 队列: 击鼓传花
- 我对自己的选择没有后悔、没有失望—兄弟会
- Linux个人常用命令
- D3.js--入门
- LINUX C语言 DNS
- block strong
- 【android】listView的item失去焦点不能点击
- 怎样写基于GPIO子系统的外接传感器的驱动
- Axure编辑函数大全
- 1043. Is It a Binary Search Tree
- 将android studio项目转换成eclipse
- Sublime Text 2 设置文件详解
- 挤点时间写博客-php&MySQL实践