提升ListView的运行效率和ListView的其他属性
来源:互联网 发布:红鸟棋牌源码网盘下载 编辑:程序博客网 时间:2024/05/24 01:42
提升ListView的运行效率
这里用到了两个参数 一个是convertView,另一个是ViewHolder,其实ViewHolder并不是一个参数。
public View getView(int position, View convertView, ViewGroup parent) { //使用inflate方法来载入layout的xml View view=mInflater.inflate(R.layout.activity_simplelist,null); Student student=mData.get(position); TextView textView_name= (TextView) view.findViewById(R.id.text_name); TextView textView_age= (TextView) view.findViewById(R.id.text_age); TextView textView_sex= (TextView) view.findViewById(R.id.text_sex); TextView textView_hobby= (TextView) view.findViewById(R.id.text_hobby); textView_name.setText(student.getName()); textView_age.setText(student.getAge()); textView_sex.setText(student.getSex()); textView_hobby.setText(student.getHobby()); return view; }
在上边的代码中,每次都将布局重新加载了一遍,在ListView快速滚动的时候就会成为性能的瓶颈。Android提供了一个叫做Recycler(反复循环器)的构件,就是当ListView的Item从上方滚出屏幕视角之外,对应Item的View会被缓存到Recycler中,相应的会从下方生成一个Item,而此时调用的getView中的convertView参数就是滚出屏幕的Item的View。这时候就用到了convertView,convertView这个参数是用来将之前加载好的布局进行缓存,以便之后可以进行重用。除此之外,findViewById()方法会每次都去获取一次控件的实例。在这里可以用一个ViewHolder来对这部分的性能进行优化。
public View getView(final int position, View convertView, ViewGroup parent) { //使用inflate方法来载入layout的xml Student student = mData.get(position); ViewHolder viewHolder; if (convertView == null) { convertView = mInflater.inflate(R.layout.activity_simplelist, null); viewHolder=new ViewHolder(); viewHolder.textView_name = (TextView)convertView.findViewById(R.id.text_name); viewHolder.textView_age = (TextView) convertView.findViewById(R.id.text_age); viewHolder.textView_sex = (TextView) convertView.findViewById(R.id.text_sex); viewHolder.textView_hobby = (TextView) convertView.findViewById(R.id.text_hobby); viewHolder.imageView_photo= (ImageView) convertView.findViewById(R.id.imageview_photo); viewHolder.checkBox= (CheckBox) convertView.findViewById(R.id.checkbox); convertView.setTag(viewHolder); }else{ viewHolder= (ViewHolder) convertView.getTag(); } viewHolder.textView_name.setText(student.getName()); viewHolder.textView_age.setText(student.getAge()); viewHolder.textView_sex.setText(student.getSex()); viewHolder.textView_hobby.setText(student.getHobby()); viewHolder.imageView_photo.setImageResource(student.getImg()); return convertView; } class ViewHolder{ TextView textView_name; TextView textView_age; TextView textView_sex; TextView textView_hobby; ImageView imageView_photo; CheckBox checkBox; }
在上边的代码中,在getView()方法中进行了判断,如果conVertView为空,则用LayoutInflater去加载布局,如果不为空则直接对convertView进行重用。另外新增了一个内部类ViewHolder,用于对空间的实例进行缓存。当conVertView为空的时候,会创建一个ViewHolder对象,并将空间的实例都存放在ViewHolder中,然后调用setTag()方法,将ViewHolder对象存储在conVertView中,conVertView不为空的时候调用getTag()方法吧ViewHolder重新取出。
0 0
- 提升ListView的运行效率和ListView的其他属性
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- Android 提升ListView的运行效率
- Android:提升ListView的运行效率
- 【Android】43、提升ListView 的运行效率
- 安卓开发:提升ListView的运行效率
- 09读书笔记之提升ListView的运行效率
- 优化ListView提升运行效率
- Android中ListView的使用(三)----- 提升ListView运行效率
- ListView运行效率的优化
- ListView的使用用ViewHolder提升效率
- 【Android成长之路】最常用和最难用的控件——ListView的浅谈(提升ListView 的运行效率)
- 提升ListView运行效率两个方法
- 【Android】安卓学习笔记之提升ListView 的运行效率
- Setting up Django and your web server with uWSGI and nginx
- 光流法与KLT
- 使用proguard混淆android代码
- Java 无名方法,static方法
- Android5.0 OTG模块传输速度
- 提升ListView的运行效率和ListView的其他属性
- poj 1840
- Jocky代码混淆配置使用
- 代码审查(Code Review)清单
- OC内存管理
- .net c# wpf线程使用心得。
- 惠普superdome2 小机故障灯清除方式
- NSIS 的 Modern UI 教程(二)
- UIWindow & UIWindowLevel