ListView的优化问题
来源:互联网 发布:佐治亚州知乎 编辑:程序博客网 时间:2024/06/05 11:44
ListView的优化问
重复使用convertView
在getView方法中输出view对象,检测每一个view对象的地址。
System.out.println("position ----->" + view);
不停地滑动,每次的值都不一样,这就说明每次滑动都会创建不同的对象,这样也会造成内存溢出的隐患。解决上面的问题需要使用getView方法的convertView来进行优化
convertView(转化视图){将将要隐藏的视图转化为将要显示的视图}如果列表项退出频幕的时候不是销毁对象而是将其转化为将要显示列表项的对象只是将里面的值改变,从而达到资源重复利用。提高节省系统空间的开支。
做法很简单只是在getView方法之中加上一句判断:
if (convertView == null) { // 表示屏幕上没有可以重复利用的对象,若为空则创建一个对象
convertView = getLayoutInflater().inflate(R.layout.main5_item,
null);
}
conVertView == null;表示屏幕上没有可以重复利用的对象,加判断若某一个Item被隐 藏,
则此时会有可以重复利用的对象(被隐藏的Item对应的对象)则重复使用这个对象即可,否则重新创建
代码如下:
使用ViewHolder提高在容器中的查找组件效率:
在每次创建的时候都要使用findViewById()方法从布局文件中进行组件的查找,如果布局文件复杂将会非常耗时,使应用程序的性能降低。因此引入ViewHolder
将ConvertView的Tag设置为ViewHolder,不为空(有可以使用的)时重新使用。
ViewHolder 是将需要缓存的View封装好,conVertView的setTag()将这些(组件对象)缓存起来供下次使用,这样就不必要重复进行查找。从而提高了效率。
代码如下:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh = null;
if (convertView == null) { // 表示屏幕上没有可以重复利用的对象,若为空则创建一个对象
convertView = getLayoutInflater().inflate(R.layout.main5_item,
null);
vh = new ViewHolder();
vh.iv = (ImageView) convertView.findViewById(R.id.imageView1);
vh.tv = (TextView) convertView.findViewById(R.id.textView5);
convertView.setTag(vh); //将对象暂存
} else {
vh = (ViewHolder) convertView.getTag(); //取出暂存的对象不必重复创建这样只创建一次
}
vh.iv.setImageResource(images[position]);
vh.tv.setText(names[position]);
return convertView;
}
}
static class ViewHolder { // 自定义类保存两个组件
ImageView iv;
TextView tv;
}
}
这样就完成了ListView使用的优化问题。
- ListView的优化问题
- ListView的优化问题
- ListView 优化注意的问题
- ListView的优化问题详解
- Android中ListView的优化问题
- Android关于ListView的优化问题
- ListView可能出现的问题及其优化
- ListView的优化问题以及策略
- 关于Android ListView的优化问题
- listview 优化问题
- listview优化问题
- listview优化问题
- listView 的加载问题,及优化,notifyDataSetChanged()的相关问题
- 关于ListView的优化所带来的问题
- android listView 重写Adapter方法getView的性能优化问题
- android学习之路之listView的优化问题
- 关于ListView的加载原理及优化问题
- ListView的异步加载图片问题与优化
- OpenStack简易安装教程--Havana版本
- Cookie/Session机制详解
- C#实现实体类与字符串互相转换的方法
- 内存泄漏以及常见的解决方法
- dialog加载动画实例
- ListView的优化问题
- C#实现语音视频录制-附demo源码
- Hibernate 数据的批量插入、更新和删除
- Unity3D的两个坑
- virtualenv 隔离gjango开发环境
- web图表库百度开源:ECharts
- Ubuntu下使用Vi时方向键变乱码 退格键不能使用的解决方法
- codeforces #325
- 结构化程序设计和面向对象程序设计的特点及优缺点