您的位置:首页 > 其它

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

2014-12-09 00:00 357 查看
当我们继承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;
}
.....


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐