6|描写人的口才好-寥若晨星网|北京军海癫痫医院
北京军海癫痫医院

您现在的位置: 首页 > 春风化雨 > 正文内容

【vb控件的方法】Android中的ListView控件的优化方法

来源:寥若晨星网   时间: 2019-03-17

作文「Android中的ListView控件的优化方法」共有 7016 个字,其中有 3046 个汉字,3241 个英文,92 个数字,637 个标点符号。作者佚名,请您欣赏。玛雅作文网荟萃众多优秀学生作文,如果想要浏览更多相关作文,请使用网站顶部的作文搜索引擎进行搜索。本站作文虽然不乏优秀之作,但仅为同学们学习交流的习作,不能当作范文使用,希望对同学们有所帮助。

摘 要: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将加载上面要显示的列表项,从屏幕最上面再次出现。
通过这种优化方式,我们不用再每次都创建新的co衡水治疗癫痫病的公立医院nvertView,而是采取每次判断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.根据需要,实现以下继承自抽象类BaseAda颠痫病能治好吗pter中的方法。
(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

Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法:

首先我们给出一个没有任何优化的Listview的Adapter类,我们这里都继承自BaseAdapter,这里我们使用一个包含100个字符串的List集合来作为ListView的项目所要显示的内容,每一个条目都是一个自定义的组件,这个组件中只包含一个textview:

Activity:

优化一:青海儿童癫痫病哪里治的好r>

也是最普通的优化,就在MyAdapter类中的getView方法中,我们注意到,上面的写法每次需要一个View对象时,都是去重新inflate一个View出来返回去,没有实现View对象的复用,而实际上对于ListView而言,只需要保留能够显示的最大个数的view即可,其他新的view可以通过复用的方式使用消失的条目的view,而getView方法里也提供了一个参数:convertView,这个就代表着可以复用的view对象,当然这个对象也可能为空,当它为空的时候,表示该条目view第一次创建,所以我们需要inflate一个view出来,所以在这里,我们使用下面这种方式来重写getView方法:

优化二:

上面是对view对象的复用做的优化,我们经过上面的优化之后,我们不需要每一个view都重新生成了。下面我们来解决下一个每一次都需要做的工作,那就是view中组件的查找:

实际上,findViewById是到xml文件中去查找对应的id,可以想象如果组件多的话也是挺费事的,如果我们可以让view内的组件也随着view的复用而复用,那该是多美好的一件事啊。。实际上谷歌也推荐了一种优化方法来做应对,那就是重新建一个内部静态类,里面的成员变量跟view中所包含的组件个数类型相同,我们这里的view只包含了一个TextView,所以我们的这个静态类如下:

那么这个viewHolder类我们要如何使用才可以达到复用效果呢?基本思路就是在convertView为null的时候,我们不仅重新inflate出来一个view,并且还需要进行findviewbyId的查找工作,但是同时我们还需要获取一个ViewHolder类的对象,并将findviewById的结果赋值给ViewHolder中对应的成员变量。最后将holder对象与该view对象“绑”在一块。

当convertView不为null时,我们让view=converView,同时取出这个view对应的holder对象,就获得了这个view对象中的TextView组件,它就是holder中的成员变量,这样在复用的时候,我们就不需要再去findViewById了,只需要在最开始的时候进行数次查找工作就可以了。这里的关键在于如何将view与holder对象进行绑定,那么就需要用到两个方法:setTag和getTag方法了:大连癫痫病症医院>

经过上面的做法,可能大家感觉不太到优化的效果,根据Google的文档,实际优化效果在百分之5左右。

优化三:

上面的两个例子中ListView都是显示的本地的List集合中的内容,List的长度也只有100个,我们可以毫不费力一次性加载完这100个数据;但是实际应用中,我们往往会需要使用Listview来显示网络上的内容,比如说我们拿使用ListView显示新闻为例:

其一:假如网络情况很好,我们使用的手机也许能够一下子加载完所有新闻数据,然后显示在ListView中,用户可能感觉还好,假如说在网络不太顺畅的情况下,用户加载完所有网络的数据,可能这个list是1000条新闻,那么用户可能需要面对一个空白的Activity好几分钟,这个显然是不合适的

其二:我们知道Android虚拟机给每个应用分配的运行时内存是一定的,一般性能不太好的机器只有16M,好一点的可能也就是64M的样子,假如说我们现在要浏览的新闻总数为一万条,即便是网络很好的情况下,我们可以很快的加载完毕,但是多数情况下也会出现内存溢出从而导致应用崩溃的情况。

那么为了解决上面的两个问题,我们需要进行分批加载,比如说1000条新闻的List集合,我们一次加载20条,等到用户翻页到底部的时候,我们再添加下面的20条到List中,再使用Adapter刷新ListView,这样用户一次只需要等待20条数据的传输时间,不需要一次等待好几分钟把数据都加载完再在ListView上显示。其次这样也可以缓解很多条新闻一次加载进行产生OOM应用崩溃的情况。

实际上,分批加载也不能完全解决问题,因为虽然我们在分批中一次只增加20条数据到List集合中,然后再刷新到ListView中去,假如有10万条数据,如果我们顺利读到最后这个List集合中还是会累积海量条数的数据,还是可能会造成OOM的情况,这时候我们就需要用到分页,比如说我们将这10万条数据分为1000页,每一页100条数据,每一页加载时都覆盖掉上一页中List集合中的内容,然后每一页内再使用分批加载,这样用户的体验就会相对好一些。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Android中的ListView控件的优化方法相关推荐:

北京军海癫痫医院
北京军海癫痫医院
北京治疗癫痫病医院    北京军海癫痫病医院好不好   北京哪家医院治疗癫痫好   西安中际中西结合脑病医院   西安中际医院    治疗癫痫病较好的专科医院   治疗癫痫病的医院   癫痫病的治疗方法   癫痫病的治疗方法   河北治疗癫痫病医院   治疗癫痫病医院   癫痫病医院   陕西西安中际医院   黑龙江癫痫病医院   癫痫病能治好吗  



新华网  人民网  新浪新闻  北京癫痫医院排名  39健康  心里频道  郑州癫痫医院排名