Android中的ListView控件的优化方法

时间:2022-05-25 11:44:24

Android中的ListView控件的优化方法

摘 要:ListView控件使用垂直列表方式显示多个列表项,通过复用列表项和将列表项界面中的全部控件进行数据持有化的优化方法,提高程序的运行效率。

【关键词】ListView 优化 列表项

ListView是Android应用程序开发中最常用的控件之一,该控件使用垂直列表的方式显示多个选项,特别适用于像手机这种长方形屏幕,且屏幕相对较小的设备。我们在手机上常用的通讯录、微博、QQ聊天和淘宝宝贝的浏览等,都是通过ListView控件进行显示的。

1 ListView控件简介

ListView控件是一个列表控件,它继承自AdapterView类,AdapterView可以通过Adapter适配器类向其子类视图填充数据。

ListView控件的特点是每一个列表项(item)独占一行,每一行的布局都是相同的,其中显示的内容和行布局分离。所以,ListView可以使用Adapter适配器来填充数据,而它本身只负责布局。

2 ListView控件的优化方法

2.1ListView控件中列表项的复用

在使用ListView控件时,我们需要注意如果我们把所有需要显示的列表项都创建界面(convertView)进行加载,那么当加载的列表项过多时,就会占用大量的内存。为解决这个问题,ListView控件在设计上采用了只创建同时显示在当前屏幕中的列表项的布局对象。如,当前屏幕最多显示10个列表项,那么ListView只创建10个convertView,其后反复使用这10个convertView显示进入到屏幕中的列表项即可。

当向上滚屏时,最上面的convertView移出屏幕,该convertView将加载下面要显示的列表项,从屏幕最下面再次出现。同理,当向下滚屏时,最下面的convertView移出屏幕,该convertView将加载上面要显示的列表项,从屏幕最上面再次出现。

通过这种优化方式,我们不用再每次都创建新的convertView,而是采取每次判断convertView是否为空,若为空,则创建布局对象。若不为空,说明当前屏幕能够同时显示的convertView都已经创建完毕, 此时将滑出屏幕的convertView取出,然后显示新的数据。

2.2 使用数据持有对象保存convertView中的全部控件

当我们在ListView中显示converView时,需要每次通过convertView.findViewId()方法来获取convertView中使用的各个控件,由于每次都需要遍历对应的XML文件,降低程序运行效率.我们也可以将每个convertView中使用的各个控件也保存成一个对象,进行复用,以优化程序。然后,我们可以通过以下两个方法将保存好的对象和当前的convertView对象进行关联。

(1) convertView.setTag(Object obj)方法,将对象obj与当前的convertView相关联;

(2)convertView.getTag()方法,获取与当前的convertView相关联的对象;

3 通过实例说明ListView控件的优化方法

下面以一个显示图书目录程序为例,说明如何对ListView控件进行优化使用。

步骤1.在activity_main.xml布局文件中声明ListView控件;

步骤2.创建第二个布局文件item.xml,在该布局文件中为ListView的item设计显示样式;该布局文件可以设计为如下图1所示布局。

步骤3.在MainActivity中实例化ListView控件,实例化对象的名字为lvBooks;

步骤4.获取数据集,即需要在ListView中显示的图书信息数据集;

步骤5.创建适配器BookAdapter,其继承自BaseAdapter类,用来抽取出一条条item列表项在ListView中显示;

说明:在这里,我们采用MVC模式显示、处理数据。其中步骤1、2负责建立View显示层,设置显示的样式;步骤4需要建立Module层类,获取图书信息;步骤5是将适配器作为控制层,负责控制数据在View中的显示。

在使用步骤5中的适配器完成数据控制,在ListView中显示数据时,主要通过以下几个步骤完成:

a.在BookAdapter类中定义两个属性,图书信息数据集books和布局解析器inflater,在构造方法中对其进行实例化;

b.根据需要,实现以下继承自抽象类BaseAdapter中的方法。

(1)使用getView方法将每一条图书信息加载到每一个item界面上去。

首先定义一个内部类,用于复用每一个界面上的控件。

然后,在getView方法中,加载每一个item界面。

通过以上步骤,我们就实现了ListView视图的优化,达到了item界面复用,和将item界面上的所有控件保存在一个对象中的目的。

(2)重写getCount()方法,返回books图书数量

(3)重写getItem(int position)方法,返回当前位置的图书信息,代码参考如下:

return books.get(position);

(4)重写getItemId(int position)方法,返回当前位置图书的ID,代码参考如下:

return books.get(position).getId();

c.定义好适配器类后,在MainActivity中将适配器对象作为一个属性进行定义,在初始化界面中进行实例化,将当前界面和图书信息数据集通过BookAdapter的构造器传递给适配器,调用setAdapter方法将ListView对象lvBooks与适配器对象badapter关联;

4 小结

对ListView的优化主要是指优化内存,通过复用列表项和定义数据持有对象,减少视图控件的创建,提高内存的使用效率。通过对ListView控件进行优化使用,可以大大提升开发的程序的运行效率,这种优化方法十分受到广大程序员的欢迎。

参考文献

[1]陈煜,周荣辉.基于Android系统的手机文件管理器的设计与实现[j].铁路计算机应用,2012(9).

作者单位

大庆职业学院计算机应用工程系 黑龙江省大庆市 163255

上一篇:高速列车车载智能化系统总体设计 下一篇:计算机网络技术对测控技术发展的促进作用