关于BaseAdapter的优化--使用ViewHolder ------------------------------------------ 推荐在ContactAdapter中定义内部类ViewHolder,用于封装模板中的各个控件,在getView()中,如果convertView为null,则创建新的ViewHolder,为ViewHolder中的各个控件赋值,并调用convertView的setTag()方法将ViewHolder对象封装起来,如果convertView()不为null,则直接调用convertView的getTag()方法获取ViewHolder对象。 通过以上代码,可以减少findViewById()的次数,以提升应用程序的性能。
只修改了 ContactAdapter 中的代码
package com.example.android_listview_baseadapter;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ContactAdapter extends BaseAdapter {
// 数据源
private List<Contact> data;
// 上下文对象
private Context context;
// 模板
private LayoutInflater inflater;
// 数据源的长度
@Override
public int getCount() {
return data.size();
}
public ContactAdapter(List<Contact> data, Context context) {
super();
this.data = data;
inflater = inflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 的到 position 所对应的位置
Contact contact = data.get(position);
// 声明 ViewHolder
ViewHolder holder;
// 判断 convertView 是否为空
if (convertView == null) {
// 如果为空 加载模板
convertView = inflater.inflate(R.layout.contact_item, null);
// 创建一个 ViewHolder
holder = new ViewHolder();
// 在 ViewHolder 中 找到 name number
holder.tvName = (TextView) convertView
.findViewById(R.id.tv_contact_item_name);
holder.tvNubmer = (TextView) convertView
.findViewById(R.id.tv_contact_item_number);
// 将ViewHolder 对象 封装起来
convertView.setTag(holder);
} else {
// 获取 ViewHolder 对象
holder = (ViewHolder) convertView.getTag();
}
// 将数据添加到ViewHolder 对象中
holder.tvName.setText(contact.name);
holder.tvNubmer.setText(contact.number);
return convertView;
}
// ViewHolder 用来封装模板中的各个控件
class ViewHolder {
TextView tvName;
TextView tvNubmer;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
}