当我们继承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; } .....
时间: 2024-10-28 16:11:46