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

自定义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;

        }

    }

猜你喜欢

转载自blog.csdn.net/lewyu521/article/details/80863816