ListView的优化(二步骤)
2016-02-28 21:56
162 查看
ListView的优化分两步:
1.减少getView中的填充View的执行次数
2.减少findViewById的次数
第一步:减少getView中的填充View的执行次数
在ListView中,当条目划出屏幕时,系统会把该条目缓存至内存,当该条目再次进入屏幕,系统在重新调用getView时会把缓存的条目作为convertView参数传入,但是传入的条目不一定是之前被缓存的该条目,即系统有可能在调用getView方法获取第一个条目时,传入任意一个条目的缓存* 步骤:先判断条目是否有缓存,无缓存布局文件填充成一个View中,有直接调用。
* 目的:减少getView中的填充条目的操作,优化代码。
话不多说,上代码!希望对大家有用!
//在BaseAdapter中,系统调用此方法,获取要显示至ListView的View对象 @Override public View getView(int position, View convertView, ViewGroup parent) { Person p = personList.get(position); View v = null; //判断条目是否有缓存 if(convertView == null){ //把布局文件填充成一个View对象 v = View.inflate(MainActivity.this, R.layout.item_listview, null); } else{ v = convertView; } //通过资源id查找组件,注意调用的是View对象的findViewById TextView name = (TextView) v.findViewById(R.id.name); return v; }
第二步:减少findViewById的次数
在adapter中创建一个ViewHolder类,在类中把条目的布局文件有什么组件,这里就定义什么属性。具体步骤如下:
class ViewHolder{ //条目的布局文件中有什么组件,这里就定义什么属性 TextView title; TextView detail; TextView comment; ImageView iv; }
public View getView(int position, View convertView, ViewGroup parent) { News news = newsList.get(position); View v = null; ViewHolder mHolder; if(convertView == null){ //获取条目布局文件 v = View.inflate(MainActivity.this, R.layout.item_listview, null); mHolder = new ViewHolder(); //把布局文件中所有组件的对象封装至ViewHolder对象中 mHolder.title = (TextView) v.findViewById(R.id.tv_title); mHolder.detail = (TextView) v.findViewById(R.id.tv_detail); mHolder.comment = (TextView) v.findViewById(R.id.tv_comment); mHolder.iv = (SmartImageView) v.findViewById(R.id.iv); //把ViewHolder对象封装至View对象中 v.setTag(mHolder); } else{ v = convertView; mHolder = (ViewHolder) v.getTag(); } //给三个文本框设置内容 mHolder.title.setText(news.getTitle()); mHolder.detail.setText(news.getDetail()); mHolder.comment.setText(news.getComment() + "条评论"); //给新闻图片imageview设置内容 mHolder.siv.setImageUrl(news.getImageUrl()); return v; }
相关文章推荐
- iOS制作自己的静态库(即.a文件)
- centos7上源码安装mysql5.7.11
- microservice-demo maven build 时报错(A required class is missing: org/codehaus/plexus/util/Scanner)
- FFmpeg滤镜使用指南
- Hibernate小结
- 我用图来说设计模式一(观察者模式)
- 重新定义技术团队
- win32应用程序和win32控制台应用程序
- 程序开发使用第三方库需要小心再小心
- Obstacks的简单使用
- linux 安全增强的经典模型
- 程序开发使用第三方库需要小心再小心
- bzoj 1880 [Sdoi2009]Elaxia的路线(最短路+拓扑序)
- 2016年总——不忘初心
- STL 中的容器们 (二)
- 数据挖掘
- JDBC中如何获取java.sql.Array的值
- CH02:提供推荐
- https://projecteuler.net/problem=11
- Linux精讲——du命令