- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(Java培训教程ListView的优化处理方案
ListView概述在Android应用开发中,ListView是最为常见的组件之一。它将数据以列表的形式展现出来,所以在大多数展示类APP以及社交类APP中都能看到它的身影。一般而言,一个ListView由以下三个元素组成:①View:用来展示列表的View,通常是一个XML文件所指定的。②适配器:用来把数据映射到ListView上,可以理解为ListView界面和数据之间的纽带和桥梁。③数据:具体被映射的数据和资源,可以是字符串、图片等。ListView的工作原理接下来我们简单介绍一下ListView加载数据的原理。有了这方面的了解后再说优化才行。ListView针对每个item(列表项)都要求adapter(适配器)“返回一个视图”(getView)。也就是说ListView在开始绘制的时候系统会首先调用getCount()函数,根据它的返回值得到ListView的长度,然后根据这个长度,逐次调用getView()方法一行一行的绘制ListView的每一项。getCount()方法的返回值是几就显示几行。具体怎么绘制呢?当我们调用getView()方法时首先会通过加载布局文件生成一个新的View对象(实际上是一个ViewGroup),然后通过该对象将布局文件中的各个组件实例化(也就是findViewById()),这样便可将数据对应到各个组件上了。但是加载布局文件属于I/O操作,是很耗时的,当我们的数据量非常庞大或者列表项非常多的时候,很容易导致ANR(应用程序无响应)现象。那么我们到底该如何解决这个问题呢?接下来引出重点--ListView的优化处理方案。ListView的真正优化处理方案关于ListView的优化主要从以下几个方面来阐述:一.复用ConvertView;使用ViewHolder,setTag1.复用ConvertView所谓的复用,就是循环反复的利用。假如说我们有一百条列表项,我们没有必要一一为他们创建新的对象,我们只要创建三个或者五个item对象,之后对他们循环利用即可。其实Android系统本身为我们考虑了ListView的优化问题。在getView()方法中系统就为我们提供了一个复用View的历史缓存对象convertView,当显示第一屏的时候,每一个item都会新创建一个View对象,这些View都是可以被复用的。此时convertView在getView()中是空值。当某个item假如说是item1滚动出屏幕时会进入到一个叫Recycler的Android构件中去填充convertView并缓存起来,当新的项目从屏幕底端上来时,ListView调用getView()方法,convertView此时不是空值了,它的值是item1,你只需要设置新的数据然后返回convertView,不必重新创建一个视图。2.缓存item条目的引用——ViewHolderfindViewById()这个方法是比较耗性能的操作。当我们通过加载布局文件来创建View对象的时候,一但该对象生成,其布局文件中子控件的id也就不会改变了,因此我们在第一次加载的时候,需要将把相关的数据保存起来,下次直接从缓存中读取,从而减少findViewById()的次数,优化显示效率。①定义存储控件引用的类ViewHolder②创建自定义的类ViewHolder holder = null ;③setTag: 在创建新的ListView的时候创建新的ViewHolder对象,然后通过findViewById找到子控件并将其引用保存起来。而View中有一个方法setTag,可用来保存一些数据结构。通过convertView.setTag(holder)将ViewHolder对象的引用设置到view中。④在复用ListView中条目的时候,再通过convertView.getTag(holder)获取holder对象的引用,此时我们只需要去修改其对象中子控件的值即可,不用findViewById()二.ListView中数据的分批及分页加载当一个应用要展示很多的数据时,一般情况下都不会把所有的数据一次性全部展示出来,通过分页的形式来展示数据。这样会有更好的用户体验。因此,很多应用都是采用分批次加载的形式来获取用户所需的数据。例如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个查看更多按钮,用户点击后,加载下一页数据。(服务器需要提供接口, 一次获取一段的数据. 数据库提供接口 ,一次查询一段的数据. )分页加载的核心技术和大致思路是:1.借助ListView的滚动监听器OnScrollListener,去判断何时该加载新数据(判断是否滚到最后一行)。2.往服务器传递表示页码的参数:page。而该page会每
您可能关注的文档
- [三、简答题请填写答案每题5分共32题.docx
- [三一口语考试手册.doc
- [三一考试各个级别的具体分析.docx
- (img格式文件制作.doc
- [三一重工基本分析.doc
- (IMS的多媒体会议系统研究.docx
- [三上作文试卷.doc
- [三上每课听写答案.doc
- [三上语文期末试卷.doc
- (indesign教程.doc
- [三维设计2013年高考数学二轮复习:立体几何Word版含答案.doc
- [三维设计2014届高考数学基础知识高频考点解题训练简单的逻辑联结词、全称量词与存在量词教学案.doc
- [三维设计2014高考英语二轮复习语法专题巧突破教学案:第一部分动词和动词短语.doc
- [三维设计2016届高三物理一轮复习课时跟踪检测17动能定理及其应用.doc
- [三维设计2016届高三物理一轮复习课时跟踪检测19功能关系能量守恒定律.doc
- (java基础知识笔记.docx
- [三维设计2016级数学一轮复习基础讲解两角和与差的正弦、余弦和正切公式含解析.doc
- [三综合环境耐久性试验.docx
- (java复习模拟.doc
- [三美学校数学期考题.doc
原创力文档


文档评论(0)