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、设置控件内容