listview的adapter中getview的三种写法
说明:以下三个例子代码摘自google 2010 I/O大会
getview的加载方法一般有以下三种种方式:
最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据
public View getView(int position, View convertView, ViewGroup parent) {
View item = mInflater.inflate(R.layout.list_item_icon_text, null);
((TextView) item.findViewById(R.id.text)).setText(DATA[position]);
((ImageView) item.findViewById(R.id.icon)).setImageBitmap(
(position & 1) == 1 ? mIcon1 : mIcon2);
return item;
}
正确的加载方式是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, parent, false);
}
((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);
((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap(
(position & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可
static class ViewHolder {
TextView text;
ImageView icon;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text,
parent, false);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
三种方式加载效率对比如下图所示:
后面1.1,1.2详细分析第三种写法,如何实现了优化。
相关文章
- android 三种定位方式
- 使用sklearn处理经纬度的三种距离计算与地图可视化
- 三种简单的浏览器设置自动刷新网页
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
- [转] java中int,char,string三种类型的相互转换
- linux设置变量的三种方式
- 《用Python写网络爬虫》——2.2 三种网页抓取方法
- iOS三种定时器的用法NSTimer、CADisplayLink、GCD
- python数据预处理的三种情况
- jsp的三种自定义标签 写法示例
- Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)
- iOS开发-三种倒计时的写法
- python 连接 mysql 的三种驱动
- C/C/C++中暂停调试的三种方法C++中暂停调试的三种方法
- C++的三种实例化对象方式
- Word高效指南 - Word输入的三种模式