初次接触Android里的holder类时,并不是很能理解holder类的使用,只知道它能够使ListView控件在滑动时不会再重复创建Item对象,从而实现减少内存消耗和减少对屏幕的渲染处理。当我们自定义适配器继承BaseAdapter的时候,会要求实现BaseAdapter中的4个抽象方法(getCount、getItem、getItemId、getView),其中getView方法里有3个参数(position、convertView、parent),那我的理解就是将convertView看成缓存对象,第一次加载时,并没有缓存对象,所以需要不断创建item对象,等创建达到一个限制时停止创建,并不断复用缓存对象容器,从而在这里实现减少内存消耗的功能。

        item对象第一次创建后才能变成缓存对象,等到item对象创建达到一个小的限制值时,缓存对象才算全部完成创建,之后就会一直复用缓存对象容器

        那Holder在其中的作用是什么呢?我想Holder就是把初次创建item对象里的控件进行一个初始化并用holder进行封装,将holder放到缓存对象手中等待添加数据。

@Override
            //将convertView看成缓存对象,假设缓存对象只能同时提几个“袋子”
            public View getView(int i, View convertView, ViewGroup viewGroup) {
                MyHolder myholder = null;
                // 第一次加载时 缓存对象手上没有“袋子”
                if (convertView == null){
                    // 1.布局转控件--->为的就是将布局变成一个一个的控件
                    convertView = View.inflate(Main2Activity.this,R.layout.layout_item,null);

                    // 2.获取到layout_item里的控件,将这些控件封装放到myholder“袋子”中
                    myholder = new MyHolder(convertView);

                    // 3.将“袋子”放到缓存对象手中,等待向这个“空袋子”里添加数据
                    convertView.setTag(myholder);
                }else{
                    // 如果缓存对象手里有“空袋子”(相当于已经划出屏幕的对象),直接等待向“空袋子”添加数据
                    // 通过不断复用已经清空的“袋子”来实现减少内存
                    myholder = (MyHolder) convertView.getTag();
                }

            //向“袋子”里放数据的过程
            myholder.tv_price.setText(cargos[i].goodsPrice);
            myholder.tv_title.setText(cargos[i].goodsTitle);
            myholder.iv_icon.setBackgroundResource(cargos[i].goodsIcon);
            return convertView;
    }


        class MyHolder{
            TextView tv_title,tv_price;
            ImageView iv_icon;
            public MyHolder(View v) {
                tv_title = v.findViewById(R.id.good_title);
                tv_price = v.findViewById(R.id.good_price);
                iv_icon = v.findViewById(R.id.good_image);
            }
        }

        如果读者觉得有更好的理解方式,或者认为我的理解错误,欢迎您来评论区进行交流,非常期待从您的评论获取到更加新颖的思考!