安卓学习笔记 ListView扩展(自定义Adapter)

本文介绍如何通过自定义Adapter来优化Android应用中的列表加载效率。主要讲解了如何重用单个Item的布局对象以减少内存消耗,并通过ViewHolder模式进一步减少findViewById的调用次数,从而提高列表滚动时的流畅度。

自定义Adapter新建一个类,继承BaseAdapter

最大程度的精准控制,最大程度的适配单一项目。
为了开发方便,如果自定义Adapter只用于单个的Activity,那么可以写成这个单个的Activity的内部类。(成员内部类和外部类参数共享)
如果多个Activity都用的到,建议单独写成一个类文件
如果自定义Adapter只在一个项目中使用,可以不传递R文件下的常量。如果自定义Adapter在其他的项目下使用,需要传递单个item的布局文件

优化的思想

第一层优化思想:
重用单个Item的布局对象,在本例中只需要用到四个。

第二层优化思想:
通过上一步的优化布局对象,来携带控件,起到减少find控件的代码。

自定义的Adapter中优化

 //getView用于负责每个Item的数据设置
    //position:当前绘制的Item的徐序号
    //convertView:
    //parent:Item所在的容器控件
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //position会自增

        Log.d("parent", "parent" + parent);
        Log.d("view", "view");
        Log.d("position", "position" + position);
        Log.d("id", "id");


        ViewHolder viewHolder;
        ImageView image;
        TextView text;
        View linearLayout = convertView;//重用,进行优化一
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(mContext);
            linearLayout = inflater.inflate(R.layout.item_layout, null);
            //找出Item
            image = (ImageView) linearLayout.findViewById(R.id.item_image);
            text = (TextView) linearLayout.findViewById(R.id.item_text);

            viewHolder = new ViewHolder(image, text);

            linearLayout.setTag(viewHolder);
        } else {
            //布局重用时
            //先从布局对象中取出viewHolder
            viewHolder = (ViewHolder) linearLayout.getTag();
            //取出之前存进去的对象
            image = viewHolder.mImage;
            text = viewHolder.mText;
        }


        //
        image.setImageResource(mImageList.get(position));
        text.setText(mTextList.get(position));

        return linearLayout;
    }


    //内部类,多个控件封装
    class ViewHolder {
        public ImageView mImage;
        public TextView mText;

        public ViewHolder(ImageView img, TextView txt) {
            mImage = img;
            mText = txt;

        }

    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值