ListView优化
2015-06-20 09:53
417 查看
1. ListView需要设置adapter,其item由adapter该方法getView(int position, View convertView, ViewGroup parent)获得的。
2. ListView中仅仅有第一屏的item须要新建,它的引用会被存在RecycleBin对象内,在拖动时后面的item实际上是重从了之前创建的item。
3. 依据上述。ListView在须要显示item时,最開始第一屏时,getView(int position, View convertView, ViewGroup parent )的第二个參数为null,显示第二屏或者回滚显示第一屏时,getView(int
position, View convertView, ViewGroup parent )第二个參数是一个原来缓存的item,我们仅仅须要在getView中把它内部数据更新就可以。
4. 假设item结构比較复杂,在更新一个已有的item内部数据的时候,查找item内部每个元素也须要占用不少资源,所以,能够把这些内部元素的引用缓存起来。直接对其赋值,最有效的方法是把这些引用存到相应的item中,比較好的方法是使用setTag()方法。
据上四条,可得出:
1. 在adapter的getView(int position, View convertView, ViewGroup parent)方法中。每次都new一个新的View返回。是性能最差的。浪费了ListView巧妙设计的一片苦心。
2. 假设item内部元素简单,getView中假设传进来的view不为空,直接为其赋值就可以。
3. 假设item内部元素复杂,能够使用Google IO 大会中讨论的方法优化(例如以下):
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.icon1 = (ImageView) convertView.findViewById(R.id.icon1);
holder.text1 = (TextView) convertView.findViewById(R.id.text1);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
holder.icon1.setImageResource(R.drawable.icon);
holder.text1.setText(mData[position]);
return holder;
}
static class ViewHolder {
TextView text1;
ImageView icon1;
}
参考:http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html
2. ListView中仅仅有第一屏的item须要新建,它的引用会被存在RecycleBin对象内,在拖动时后面的item实际上是重从了之前创建的item。
3. 依据上述。ListView在须要显示item时,最開始第一屏时,getView(int position, View convertView, ViewGroup parent )的第二个參数为null,显示第二屏或者回滚显示第一屏时,getView(int
position, View convertView, ViewGroup parent )第二个參数是一个原来缓存的item,我们仅仅须要在getView中把它内部数据更新就可以。
4. 假设item结构比較复杂,在更新一个已有的item内部数据的时候,查找item内部每个元素也须要占用不少资源,所以,能够把这些内部元素的引用缓存起来。直接对其赋值,最有效的方法是把这些引用存到相应的item中,比較好的方法是使用setTag()方法。
据上四条,可得出:
1. 在adapter的getView(int position, View convertView, ViewGroup parent)方法中。每次都new一个新的View返回。是性能最差的。浪费了ListView巧妙设计的一片苦心。
2. 假设item内部元素简单,getView中假设传进来的view不为空,直接为其赋值就可以。
3. 假设item内部元素复杂,能够使用Google IO 大会中讨论的方法优化(例如以下):
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.icon1 = (ImageView) convertView.findViewById(R.id.icon1);
holder.text1 = (TextView) convertView.findViewById(R.id.text1);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
holder.icon1.setImageResource(R.drawable.icon);
holder.text1.setText(mData[position]);
return holder;
}
static class ViewHolder {
TextView text1;
ImageView icon1;
}
参考:http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html
相关文章推荐
- 日期相差天数计算
- Hadoop 学习笔记一 基础知识及常用命令
- PHP调用C程序问题(C程序需要在后台驻留)涉及LINUX权限问题
- 社説 20150620 上納金脱税逮捕 暴力団壊滅の切り札となるか
- ubuntu QT开发环境
- 操作符&&与||在有一个操作数不是布尔值时的返回规则
- 日经社説 20150620 消費者の利益となる電力・ガス改革に
- Android数据库高手秘籍(三)——使用LitePal升级表
- 日经社説 20150620 中国は香港との約束履行を
- Objective-C----Block 、数组排序
- C语言一个队列的实现
- Apache web submit 403 error, access forbbiden, Undefined variable
- 日经春秋 20150620
- windows xp 恢复删除的分区
- SQL 标量函数&表值函数
- static用法
- mongodb3.0安装
- 天声人語 20150620
- Android数据库高手秘籍(二)——创建表和LitePal的基本用法
- 袖珍实干的卸载小软Soft Organizer,使用和测评: