ListView优化——ViewHolder
2015-12-17 20:58
190 查看
ViewHolder方式
如果你还没听说过ViewHolder,那么你该去好好看看官方文档了,而不是埋头写代码。
一个ListView的item布局中需要赋值的子元素太多为了避免重复的调用FindViewById方法,我们一般考虑使用ViewHolder方式来实现BaseAdapter。
如下:
如果你还没听说过ViewHolder,那么你该去好好看看官方文档了,而不是埋头写代码。
一个ListView的item布局中需要赋值的子元素太多为了避免重复的调用FindViewById方法,我们一般考虑使用ViewHolder方式来实现BaseAdapter。
如下:
//在外面先定义,ViewHolder静态类 static class ViewHolder { public ImageView img; public TextView title; public TextView info; } //然后重写getView @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.list_item, null); holder.img = (ImageView)item.findViewById(R.id.img) holder.title = (TextView)item.findViewById(R.id.title); holder.info = (TextView)item.findViewById(R.id.info); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.img.setImageResource(R.drawable.ic_launcher); holder.title.setText("Hello"); holder.info.setText("World"); } return convertView; }
ViewHolder在
convertView第一次inflate的时候绑定了相关的子元素,并被
convertView保存下来(setTag方法),当相同的
convertView再次需要显示的时候直接调用
convertView的getTag取出ViewHolder,并对ViewHolder中的元素赋值。使用ViewHolder模式避免了没有必要的调用findViewById():因为 太多的findViewById也会影响性能 ,这点不容易考虑到。
相关文章推荐
- 我的cocoapods安装和使用
- leetcode刷题日记——Remove Duplicates from Sorted List
- 基于模板元编程技术的跨平台C++动态链接加载库
- wifi转串口芯片——ESP8266:配置与使用
- 给jdk写注释系列之jdk1.6容器(4)-HashMap源码解析
- 第三个Sprint冲刺github 与最终 github
- Android之取消ViewPage+Fragment的预加载
- 忘掉你的大数据,数据思维才最重要!
- UNIX入门之常用头文件apue.h (附带去除文档空格的代码)
- java中静态代理跟动态代理之间的区别
- centos安装lxml和pyspider
- Gradle入门
- JavaScript-DOM操作HTML、CSS
- 官方乌镇定调互联网金融,P2P、众筹专项对待
- ios 动画(抖动,入场动画,组动画)
- Hermite (埃尔米特)曲线
- C# 编辑距离实现
- 【leetcode】318. Maximum Product of Word Lengths
- 【Android图片加载框架】制作自己的图片加载框架
- C++ 折半插入排序算法