ListView性能优化
来源:互联网 发布:一个问题阻止了windows 编辑:程序博客网 时间:2024/06/03 18:05
前期ListView列表存在的问题:
每个列表项都是新建出来的,存在两个耗时的地方
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.phone_item_2, null);
TextView name = (TextView) v.findViewById(R.id.name);
上面两个方法要尽可能少的调用
为了提高手机滑动的流畅性
解决办法
View的重用
View的每次创建是比较耗时的,因此对于getView方法传入的
convertView应充分利
ViewHolder的应用
View的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,
之后就用View.getTag()方法来获得ViewHolder对象
Recycler的运行机制:
Adapter中的public View getView(int position, View convertView,
ViewGroup arg2)
这个方法是ListView性能好坏的关键。方法中有个convertView,
这个是Android在 为我们而做的缓存机制。
ListView中每个item都是通过getView返回并显示的,假如item有很多个,
那么重复创建这么多对象来显示显然是不合理。因 此,Android提供了
Recycler,将没有正在显示的item放进RecycleBin(回收站),然后在显
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
ViewHolder viewHolder = null;
if(convertView==null){
LayoutInflater layoutInflater = LayoutInflater.from(context);
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.call_item, null);
viewHolder.call_item_tv_familyname = (TextView) convertView.findViewById(R.id.call_item_tv_familyname);
viewHolder.call_item_tv_name = (TextView) convertView.findViewById(R.id.call_item_tv_name);
viewHolder.call_item_tv_phone = (TextView) convertView.findViewById(R.id.call_item_tv_phone);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
User2 user = user2List.get(position);
viewHolder.call_item_tv_familyname.setText(user.getFamilyName());
viewHolder.call_item_tv_name.setText(user.getName());
viewHolder.call_item_tv_phone.setText(user.getPhone());
viewHolder.call_item_tv_familyname.setBackgroundColor(colorId[getRandomNum()]);
return convertView;
}
final class ViewHolder{
TextView call_item_tv_familyname;
TextView call_item_tv_name;
TextView call_item_tv_phone;
}
convertView在屏幕可以容纳item时,每一次都是空的,只有当item的数量超出
手机屏幕所能容纳的数量时,滚出手机屏幕的那个item会放入convertView中等待
重用。
每个列表项都是新建出来的,存在两个耗时的地方
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.phone_item_2, null);
TextView name = (TextView) v.findViewById(R.id.name);
上面两个方法要尽可能少的调用
为了提高手机滑动的流畅性
解决办法
View的重用
View的每次创建是比较耗时的,因此对于getView方法传入的
convertView应充分利
ViewHolder的应用
View的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,
之后就用View.getTag()方法来获得ViewHolder对象
Recycler的运行机制:
Adapter中的public View getView(int position, View convertView,
ViewGroup arg2)
这个方法是ListView性能好坏的关键。方法中有个convertView,
这个是Android在 为我们而做的缓存机制。
ListView中每个item都是通过getView返回并显示的,假如item有很多个,
那么重复创建这么多对象来显示显然是不合理。因 此,Android提供了
Recycler,将没有正在显示的item放进RecycleBin(回收站),然后在显
示新视图时从RecycleBin中复用这个 View。
Recycler原理图:
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
ViewHolder viewHolder = null;
if(convertView==null){
LayoutInflater layoutInflater = LayoutInflater.from(context);
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.call_item, null);
viewHolder.call_item_tv_familyname = (TextView) convertView.findViewById(R.id.call_item_tv_familyname);
viewHolder.call_item_tv_name = (TextView) convertView.findViewById(R.id.call_item_tv_name);
viewHolder.call_item_tv_phone = (TextView) convertView.findViewById(R.id.call_item_tv_phone);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
User2 user = user2List.get(position);
viewHolder.call_item_tv_familyname.setText(user.getFamilyName());
viewHolder.call_item_tv_name.setText(user.getName());
viewHolder.call_item_tv_phone.setText(user.getPhone());
viewHolder.call_item_tv_familyname.setBackgroundColor(colorId[getRandomNum()]);
return convertView;
}
final class ViewHolder{
TextView call_item_tv_familyname;
TextView call_item_tv_name;
TextView call_item_tv_phone;
}
convertView在屏幕可以容纳item时,每一次都是空的,只有当item的数量超出
手机屏幕所能容纳的数量时,滚出手机屏幕的那个item会放入convertView中等待
重用。
0 0
- listview加载性能优化
- listview加载性能优化
- listView性能优化
- android ListView 性能优化
- Android ListView性能优化
- ListView 性能优化
- android listview 性能优化
- Listview性能优化
- Listview性能优化
- ListView性能优化
- ListView的性能优化
- ListView性能优化
- ListView的性能优化
- ListView 性能优化
- Android ListView性能优化
- ListView性能优化
- ListView性能优化
- listView的性能优化
- 二叉树 小球下落问题
- Gerrit代码审核服务器搭建
- libevent源码分析-event
- 继承和重写(8.17)
- 用word模板作为add-in,制作一些快捷操作
- ListView性能优化
- C++拷贝构造函数详解
- 纱布の莫比乌斯反演的一些理解。
- 微商开始兴起,微时微商品牌孙佺推广代悄然而来
- Class.getResource与Class.getClassLoader.getResource归纳整理
- Perl学习(一)
- 黑马程序员 -- oc多文件开发的好处以及Category
- tomcat链接数据库
- VC学习笔记:ClistCtrl控件学习笔记