BaseAdapter 的优化

关于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;
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值