ZNDS智能电视网 推荐当贝市场

TV应用下载 / 资源分享区

软件下载 | 游戏 | 讨论 | 电视计算器

综合交流 / 评测 / 活动区

交流区 | 测硬件 | 网站活动 | Z币中心

新手入门 / 进阶 / 社区互助

新手 | 你问我答 | 免费刷机救砖 | ROM固件

查看: 13266|回复: 0
上一主题 下一主题
[教程]

listview学习

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-28 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1在Android的UI组件中,ListView是一个非常实用的组件。该组件主要是用于展示大批量的同类数据,比如联系人信息。   
而在自定义ListView的样式时,需要重写数据接口的ListAdapter类中的getView函数,以此来定制ListView中每个item的样式。在这里Android系统为了效率的原因引进了ConvertView这一个变量。ConvertView在这里主要的作用就是方便系统在重写UI时,能重用原来实用过的View实例,以此来降低系统资源的消耗和提高代码效率。
但是当你希望根据itemid实现不同的样式时,往往会出现一些意想不到的情况。这主要是因为两方面的原因导致的
   
Andorid并不保证getView的执行顺序因为getView的不确定性,导致ConvertView的循序可能是无序的。   
   
简单解释ConvertView就是最近使用过的getView函数返回的实例,但是Andorid是怎样决定使用那个实例传递给本次getView函数的呢?
在经过试验后,我发现关于ConvertView的几点特征。
   
对于一个ListView,Android保存所有曾经生成过的ConvertView实例,直至系统垃圾回收这些实例位置,而不是只保存最后使用的ConvertView对象。这些保存的ConvertView以使用时间顺序排序,并依次被传递到getView函数中。   
以一个简单的例子来会更直观,   
   
我有一列String需要展示   
view plain view plain view plain view plain view plaincopy   
   
   
Context [] c = {1,2,3.......14,16,15}  Color [] co = {r,w,...........w,w,r}     
   
   
由此可见当下次需要调用多个convertView时,输出的颜色顺序将会出错。   
   
总结:由于ListView在执行时,各种操作需要重写的item数是不确定的,同时getView函数调用的顺序也是不确定的,这将导致convertView的数组顺序发生严重的错乱。所以并不建议通过判断position来实现不同的样式,除非不使用convertView   
   
目前避免这种错乱的解决方法,有几种。   
不使用convertView,直接每次重新实例化需要的View对象通过外部的静态数组基于itemid或则position值来保存View的Layout,content及style信息,在每次getView函数中都重新赋值。   
   
但是上述两种方法都存在效率损失的问题,目前没有找到太好的解决方法。   
   
</strong

上一篇:Android软件开发之发送短信与系统短信库解析(三十)
下一篇:第二十二讲:AIDL和远程Service调用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 苏ICP备2023012627号 )

网络信息服务信用承诺书 | 增值电信业务经营许可证:苏B2-20221768 丨 苏公网安备 32011402011373号

GMT+8, 2025-7-30 14:26 , Processed in 0.056770 second(s), 13 queries , Redis On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2025 ZNDS.Com

快速回复 返回顶部 返回列表