本章节主要详解Android UI相关的知识
提升ListView的运行效率
直接使用系统内置的ArrayAdapter的运行效率很低,因为ArrayAdapter的getView()方法中每次都将布局重新加载了一遍,当ListView快速滚动式就会成为性能的瓶颈
1)ArrayAdapter中的getView()方法中有一个参数(View)convertView,这个参数用于将之前加载好的布局进行缓存,便于之后进行重用
@Override
Public View getView(int position, ViewconvertView, ViewGrop parent){
Viewview;
If(convertView!= null){
view= layoutInflater.from(getContext()).inflate(resourceId, null);
}else{
view = convertView;
}
}
——优点:不会重复加载布局
缺点:每次在getView()方法中还是会调用View的findViewById()方法来获取一次控件的实例
2)借助一个ViewHolder进行优化
新增一个内部类ViewHolder,用于对控件的实例进行缓存
当convertView为空时,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用View的setTag()方法,将ViewHolder重新取出
——所有控件的实例都缓存在了ViewHolder里,就没有必要每次都通过findViewById()方法来获取控件实例了。
进过这两步,ListView已经基本上优化完成了。