继承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;
    }
.....

时间: 2024-10-28 16:11:46

继承BaseAdapter覆写getView()方法解析的相关文章

关于方法的继承和覆写

* 关于方法的覆写: *   关于方法的重写和覆盖的前提条件: *     子类继承父类,就继承了父类的所有方法和属性,就相当于把父类的代码完全复制一份到子类,只是相当于 *     我们子类中可以添加新的方法和属性,同时也可以扩展改写继承自父类的方法 *     1 什么时候方法要进行重写? *     如果父类中的方法已经无法满足子类的要求,需要将父类中的方法进行重新写一遍 *     2.子类如果重写父类中的方法之后,这类对象一定调用重写之后的方法 *     3 发生方法覆盖的条件: *

覆写equals方法为什么需要覆写hashCode方法

覆写equals方法必须覆写hashCode方法,是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢? void test() { // Person类的实例作为Map的key Map<Person, Object> map = new HashMap<Person, Object>(); map.put(new Person("张三"), new Object()); // Person类的实例作为List的元素 List<P

java覆写equals方法

何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). object规范规定,如果要重写equals(),也要重写hashcode() 如何覆写equals() 覆写equals方法 1  使用instanceof操作符检查“实参是否为正确的类型”. 2  对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值. 3. 对于非float和double类型的原语类型域,使用==比较: 4  对于对象引用域,递归调用equals方法: 5  对于flo

java继承和覆写

继承的目的?     : 代码的重用   什么是继承?        extends     语法 :         class 子类 extends 父类 {         }    如果没有声明继承  就默认继承Object(所有类的祖类)静态变量 : 不能被继承,不过可以直接类名调用静态方法 : 不能被继承,可以调用成员变量 : 能被继承,前提是子类没有和父类相同的变量(数据类型 和 变量名)  如果有相同的变量,就不会继承成员方法 : 会被继承 会被覆写局部变量 : 在方法中 无所谓

JAVA继承与覆写

实例:数组操作 首先是开发一个整型数组父类,要求从外部控制数组长度,并实现保存数据以及输出.然后子类中实现排序和反转. 基础父类代码如下: 1 class Array { 2 private int data [] ; 3 private int foot ; 4 public Array(int len ) { 5 if (len > 0 ) { //至少有元素 6 this.data = new int [len] ; 7 } else { 8 this.data = new int [1]

覆写toString方法 Java提供的默认toString方法不好用

还有一个问题的是包管理,并没有官方最佳管理方案,在go的世界里存在大量的自制解决方案.go语言的包是没有中央库统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉取,直接跳过中央版本库的约束,让代码的拉取直接基于源代码版本控制库,开发者间的协同直接依赖于源代码的版本控制.直接去除了库版本的概念.没有明显的包版本标识,感觉还是有点不适应,官方的建议是把外部依赖的代码全部复制到自己可控的源代码库中,进行同意管理.从而做到对依赖包的可控管理. R软件功

UINavgationController中覆写preferredStatusBarStyle方法不执行的问题

#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault; } @end 如果viewController不是在 UINa

onTouch事件试验(覆写onTouchEvent方法,同时设置onTouchListener)

xml布局文件 <</span>RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&qu

Java中方法的覆写

所谓方法的覆写override就是子类定义了与父类中同名的方法,但是在方法覆写时必须考虑权限,即被子类覆写的方法不能拥有比父类方法更加严格的访问权限. 修饰符分别为public.protected.default.private.他们的访问权限如下图所示. 用public修饰的类在本类.同包.子类.其他包中互相访问都是可以的. 用protected修饰的类在本类.同包.子类中互相访问都是可以的,protected不可以在包外没有继承关系的类中互相访问. 就说明用default修饰的类在本类.同包