Android开发之ViewHolder学习笔记

 时间:2024-10-13 06:11:58

BaseAdapter是使用得比较多的一个类适配器,通过重写getView方法,展示自定义视图,如淡馋衔锂何优化getView方法是程序员讨论的热点,最近了看了一篇TeachCourse的文章,使用ViewHolder类可以很好优化适配器的性能,原理:每次加载getView视图,只缓存第一次可见的getView视图,以后每次调用缓存,更新getView视图中数据达到优化性能目的。

Android开发之ViewHolder学习笔记

工具/原料

Android开发工具:Android Studio或Eclipse

虚拟设备或测试手机

一、熟悉BaseAdapter抽象类

1、BaseAdapter继承Object,实现接口ListAdapter、SpinnerAdapter,必须实现Adapter的四个抽象方法:getItem(int),getItemId(int),getCount(),getView(int,View,ViewGroup)

Android开发之ViewHolder学习笔记

2、方案一、初学者经常使用的方法,方法中不使用ViewHolder缓存视图,首先初始化视图对象,每次初始化getView方法中的View对象,这样会创建很多很多个实例,可能造成内存的溢出,更新数据的速度变得比较慢,不推荐使用,代码如下:

Android开发之ViewHolder学习笔记

3、方案二、使用ViewHolder,比较推荐的一种优化方案,在项目开发中,会在BaseAdapter子类中创建一个ViewHolder内部类或者独立声明一个ViewHolder类,在ViewHolder类中声明控件名称,然后在getView方法中使用初始化一次,View对像初始化一次,将控件引用赋值给ViewHolder变量,代码如下:

Android开发之ViewHolder学习笔记
Android开发之ViewHolder学习笔记

4、方案三、原理和方案二一样,在第一次加载可见视图的时候,缓存控件,以后每次加载直接更新数据,但多次使用findViewById方法,在性能上比第一种还差,不妨看试试,代码如下:

Android开发之ViewHolder学习笔记

5、三种方法中,现在性能上推荐使用ViewHolder,第一步定义内部类,第二步判断convertView是否为第一次加载,如果是第一次加载就初始化一次ViewHolder类,并设置ViewHolder属性值(声明的控件,作为内部类属性),否则根据标签中获取缓存的ViewHolder对象,再分别给ViewHolder属性设置值(即填充数据),这里需要注意是如果使用setTag有多个标签,使用带参数的setTag(mName,mView)的方法,例如方案三

Android开发之ViewHolder学习笔记
  • 保卫萝卜4阿波尼克号54关攻略
  • 保卫萝卜4阿波尼克号第27关攻略
  • 保卫萝卜4阿波尼克号3关攻略
  • 保卫萝卜4阿波尼克号21关攻略
  • VS code如何重命名变量和函数名称
  • 热门搜索
    母亲节手抄报简单漂亮 手抄报图片大全6年级 感恩祖国手抄报 世界地球日手抄报 地球日手抄报简单字少 重阳节的手抄报简单又漂亮 初一英语手抄报 关于花的手抄报 手抄报边框简笔画 交通规则手抄报