Adapter类型控件之BaseAdapter(基础适配器)优化

(一)概述
这里写图片描述

(二)复用ConvertView
NO.1 ——ConvertView是什么?
ConvertView是系统提供给我们的可供复用的View的缓存对象,那么,我们每次Inflate()xml文件的时候是不是先查看下ConvertView缓存对象中是否已经有了这个需要加载的对象,若没有我就加载,如果有,我是不是可以直接从ConvertView缓存对象拿出来使用了!这就大大提升了性能,其次,我们每次加载ListView中的Item对象时,都需要执行一遍getView()方法,而每执行一遍我都需要加载一次item的xml文件,这就导致了性能的下降,若给ConvertView缓存对象加一个判断对象的话,执行效率就会大大提高,那就优化吧,优化后的代码如下:


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //加入了if判断语句,convertView 缓存对象是否存在,若不存在则加载,相反,则不加载;

        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_heros, parent,false);
        }  

        ImageView img_iconView = (ImageView) convertView.findViewById(R.id.heros_imgs);  

        TextView tvNames = (TextView) convertView.findViewById(R.id.names);   

        TextView tvSpakes = (TextView) convertView.findViewById(R.id.spake);   

        img_iconView.setBackgroundResource(mHeros.get(position).gethIcon());
        tvNames.setText(mHeros.get(position).gethName());   

        tvSpakes.setText(mHeros.get(position).gethSpake());

        return convertView;
    }

(三)ViewHolder模式
这里写图片描述

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //加入了if判断语句,convertView 缓存对象是否存在,若不存在则加载,相反,则不加载;
        //使用ViewHolder解决执行方法时多次调用findViewById()方法;
        ViewHolder holder = null;

        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_heros, parent,false);
            holder = new ViewHolder();

            holder.img_iconView = (ImageView) convertView.findViewById(R.id.heros_imgs);
            holder.tvNames = (TextView) convertView.findViewById(R.id.names);
            holder.tvSpakes = (TextView) convertView.findViewById(R.id.spake);

            convertView.setTag(holder); //将holder存储到convertView中
        }else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.img_iconView.setBackgroundResource(mHeros.get(position).gethIcon());
        holder.tvNames.setText(mHeros.get(position).gethName());
        holder.tvSpakes.setText(mHeros.get(position).gethSpake());

        return convertView;
    }

    static class ViewHolder{
        ImageView img_iconView;
        TextView  tvNames;
        TextView   tvSpakes;
    }

}

这里写图片描述

那酸爽怎是无与伦比呀~如果你觉得对你有帮助就帮我点个赞吧~~<完>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值