首页 > 代码库 > ListView的优化
ListView的优化
1、 复用行布局(用已经完全消失的布局对象去替代即将出现的那个布局对象)
在自定义MyAdapter(继承BaseAdapter)适配器时,需重写getVIew(int position, View convertView, ViewGroup parent)方法,其中的converView方法会保存那个已经完全消失的布局对象,因此我们用convertView来替代即将要创建的inflate
(判断convertView为空时创建布局文件,不为空时直接用convertView来替代)
实现代码:
View inflate = null;
if(convertView==null){
//得到布局转换器
LayoutInflater layoutInflater= getLayoutInflater();
//把布局xml文件转换成布局对象
inflate = layoutInflater.inflate(R.layout.item,null);
}else{
//用已经完全消失的布局对象去替代即将出现的布局对象
inflate = convertView;
}
2、去减少控件的查找次数
2.1 单控件——将TextView位置上调
实现代码:
Viewinflate = null;
TextViewtextView = null;
if(convertView==null){
LayoutInflaterlayoutInflater = getLayoutInflater();
//把布局xml文件转换成布局对象
inflate= layoutInflater.inflate(R.layout.item, null);
textView= (TextView) inflate.findViewById(R.id.textView1);
//把ViewHolder对象放到inflate包里面
inflate.setTag(textView);
}else{
//用已经完全消失的布局对象去替代即将出现的布局对象
inflate= convertView;
//把对象从inflate的口袋中
textView= inflate.getTag();
}
2.2 多控件——使用ViewHolder:创建对象ViewHolder,将TextView封装到新ViewHolder中(放入的是多控件)
实现代码:
================================================
classViewHolder{
TextViewtextView;
TextViewtextView2;
}
================================================
Viewinflate = null;
ViewHolderholder = null;
//convertView用来保存那个已经完全消失的布局对象
if(convertView==null){
holder= new ViewHolder();
//得到布局转换器
LayoutInflaterlayoutInflater = getLayoutInflater();
//把布局xml文件转换成布局对象
inflate= layoutInflater.inflate(R.layout.item, null);
holder.textView= (TextView) inflate.findViewById(R.id.textView1);
holder.textView2= (TextView) inflate.findViewById(R.id.textView2);
//把ViewHolder对象放到inflate包里面
inflate.setTag(holder);
}else{
//用已经完全消失的布局对象去替代即将出现的布局对象
inflate= convertView;
//把对象从inflate的口袋中
holder= (ViewHolder) inflate.getTag();
}
3、代码优化
1、创建一个类,类的属性就是我们所需的数据类型
2、创建一个容器
3、把所需的数据都放到容器中
4、根据position从容器中取出该行所对应的那个对象
5、设置控件内容