首页 > 代码库 > 继承BaseAdapter覆写getView()方法解析

继承BaseAdapter覆写getView()方法解析

当我们继承BaseAdapter自定义适合自己使用的Adapter时候,不可避免的要覆写getView()方法。自己在分析蓝牙4.0官方源代码遇到这个问题,分析了几遍,有所领悟,参考了这篇博文http://blog.csdn.net/pkxiuluo01/article/details/7380974,现结合蓝牙4.0官方的这部分代码将getView()解析一下。

//当界面每显示出来一个item时,就会调用该方法,getView()有三个参数,第一个参数表示该item在Adapter中的位置;第二个参数是item的View对象,是滑动list时将要显示在界面上的item,如果有item在显示界面消失,这时android会将消失的item返回,称为旧view,也就是说此时的view不为null;第三个参数用在加载xml视图。
public View getView(int i, View view, ViewGroup viewGroup) {
            ViewHolder viewHolder;
            // General ListView optimization code.
            if (view == null) {//当滑动list时,如果没有item消失,这时参数对象view是没有任何指向的,为null
                view = mInflator.inflate(R.layout.listitem_device, null);//mInflator是LayoutInflater类(布局加载器)实例对象,该行是动态加载布局
                viewHolder = new ViewHolder();//获得实例对象
                viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address);//分别实例化显示Name和Address的textView控件
                viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
                view.setTag(viewHolder);//向view中添加附加数据信息,在这里也就是两个textView对象
            } else {
                viewHolder = (ViewHolder) view.getTag();//如果有旧的view对象返回(该情况是滑动list时有item消失),从该view中提取创建的两个已经创建的textView对象,达到对象循环使用
            }
            BluetoothDevice device = mLeDevices.get(i);//从搜索到的设备列表中得到显示位置设备对象。
            final String deviceName = device.getName();
            if (deviceName != null && deviceName.length() > 0)
                viewHolder.deviceName.setText(deviceName);//输出显示设备SSID
            else
                viewHolder.deviceName.setText(R.string.unknown_device);
            viewHolder.deviceAddress.setText(device.getAddress());//输出显示设备地址信息

            return view;
        }
.....
static class ViewHolder { //该类用来暂存textView的实例化对象,达到循环使用
        TextView deviceName;
        TextView deviceAddress;
    }
.....



继承BaseAdapter覆写getView()方法解析