关于BaseAdapter的两个优化方案

今天几下的是BaseAdapter的优化这个问题

在曾经的开发中遇到了大大小小的listview问题

感觉这个优化还是很实际也很实用,废话不多说!!!


一、ConvertView得复用

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);
    ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
    TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName);
    TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak);

    img_icon.setBackgroundResource(mData.get(position).getaIcon());
    txt_aName.setText(mData.get(position).getaName());
    txt_aSpeak.setText(mData.get(position).getaSpeak());
    return convertView;
}
是不是很熟悉,getView我们是经常用到了,那大家仔细看一下,是不是

界面有多少个item我们就得去get多少次,这是肯定

那每次我们都要去inflate()一次,累不累啊,你不累,系统累了

inflate()每次都要加载一次xml,其实这个convertView是系统提供给我们科用的View的缓存对象


那怎么优化呢?


可以在定义convertView的时候加上这样:

if(convertView == null){
        convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);
    }
这样这个问题就解决了。


二、ViewHolder重用组件

上面说了,getView()每次都会被调用,那是自然,那调用那么多次,其实还有一个也一直被调用,那就是findViewById了

那其实也是可以进行优化的,那就是今天的主角:ViewHolder,本屌曾深深爱上它。。。

怎么用,来,这里:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if(convertView == null){
        convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);
        holder = new ViewHolder();
        holder.img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
        holder.txt_aName = (TextView) convertView.findViewById(R.id.txt_aName);
        holder.txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak);
        convertView.setTag(holder);   //将Holder存储到convertView中
    }else{
        holder = (ViewHolder) convertView.getTag();
    }
    holder.img_icon.setBackgroundResource(mData.get(position).getaIcon());
    holder.txt_aName.setText(mData.get(position).getaName());
    holder.txt_aSpeak.setText(mData.get(position).getaSpeak());
    return convertView;
}

static class ViewHolder{
    ImageView img_icon;
    TextView txt_aName;
    TextView txt_aSpeak;
}
是不是很简单,这就是个绝对的模板,按这个来就对了,static加不加看个人情况啊,可以方便之后被其他调用,

当然如果只有一个调用的话那也可加可不加哈。


感谢 : http://www.runoob.com/w3cnote/android-tutorial-baseadapter.html 的资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值