RSS订阅
ViewGroup parent
作者:admin 日期:日期:11/12/03 11:59 人气:
Why ListView?
ListView 如果仅仅出于功能上的需求ListView可能不存在的必要,ListView能作的事情基础上ScrollView也能胜任.ListView存在的最基本的起因在于它的高效(如何实现的?).ListView通过对象的复用从而减少内存的消耗,也减少了对象的创建从而也减少的cpu的消费(在Androidk中创建View对象常常随同着解析xml).ListView的实质是一张bitmap(当然所有的控件文字等在屏幕上看到的终极都会变成bitmap),ListView会依照需要,依据Adapter供给的信息把需要的Item画出来显示在屏幕上,当屏幕转动的时候会从新盘算Item的地位并绘制出新的bitmap显示在屏幕上.这样听起来感到可能不是很高效,但这样带的利益就是,每用为一第个Item
创建一个View对象,款式一样的对象可以共用一个View对象,减少了内存的消耗.而且ListView是事件驱动的,只有当需要的时候才会重新绘制,并且只会
绘制当前屏幕上所显示的Items.
How To Use?
ListView 离不开Adapter,通常的作法创建一个类继续BaseAdapter,Override getCount()和getView()等方法.天生这个类的对象,调用ListView的setAdapter()与ListViw进行绑定.
How Does It work?
ListView会调用跟其绑定的Adapter的getCount()方法晓得有多少个Item需要展示,而后循环调用getView(int position, View convertView, ViewGroup parent)知道第position个Item该怎么画,并画出来直到把当前的ListView的空间填满.当Adapter当中的数据转变时,需调用notifyDataSetChanged ()告知Adapter数据产生了变更或者给Adapter注册一个察看者registerDataSetObserver (DataSetObserver observer).当Adapter得悉与其绑定的数据己发生改变时光,我在包里找出圆珠笔使劲的在木栏杆上写下了多少个字,会再次调用getCount()方法,并轮回调用getView(int position, View convertView, ViewGroup parent)刷新当前页面.
Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
当这个 ListView 向上滚动需要创建一个 Item9 同时, 有些对象(比方Item1 )不在显示区域将看不到,这时 android 将会把 item1 的 引用传递给 Adapter.getView() 中的 convertView这样我们就不用再创建一个View来寄存Item9,只要要把本来的item1对象作下修正,就可以重复使用了 ;我们也不用担心 convertView 是不是准确的类型,这个由体系保障,刚开一秒传奇,所以我们要作的就是把 convertView 转换(时常需要向下转型)成我们自己的 View 再给它赋值, in this case :(TextView) convertView.setText("Item9");public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { //this would be first time to show the item,so we need to create it convertView = mInflater.inflate(R.layout.item, null); //we grab the convertView,  “报告老师,英雄合击,modify it and reuse it ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); return convertView;
调用办法所须要的耗费要比拜访变量高得多,而上面的代码一次又一次的调用findViewById()方式,作着反复的事件.所以我们能够进一步进行如下优化: 创立一个类用来保留一些View的引用,这样我们就可以直接使用,而不必再调用findViewById().由于我们所保存的只是援用不是对象自身,所以不用担忧会占用大批内存static class ViewHolder { TextView text; ImageView icon;public View getView(int position, View convertView, ViewGroup parent){ ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); //we store the reference ,so that we donrt have to call findViewById() over and over again holder.text.setText(DATA[position]); holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); return convertView;
上图是T-mobile g1上采集的的数据,现在看来可能当初不是很正确,但其性能上的差别仍是很有参考价值的.
Tips & Tricks
ListView是为了大容量数据展现而设计的.假如数据量(Item的数目)不是很大,且用ListView实现起来比拟麻烦,不妨换种思路,新开传奇,不应用ListView,而用ScrollView来实现.
如果Item信息布局比较庞杂或者Item的数量良多,出于机能的斟酌,倡议自定义一个View组件实现需要的功效,而不是组合其它控件到达所要的后果.
ListView滚动变黑:在xml中给ListView增加一个属性android:cacheColorHint="#00000000" .当ListVIew中有很多Item,有时候需要疾速的滚动.比如从第一个Item滚动到第600个Item这个时候,中间的很多Item对用户来说意思不是很大,但android却要调用 adapter.getView()方法将这些Item逐个画出,并且因为滚动很快用户不盼望有任何的延迟.这在一些低端手机好比g1,是很难作到的.所以google工程师想出的一个措施是在滚动的时候,让屏幕变黑用一张玄色bitmap盖住ListView,而不去绘制旁边进程中的很多Item,从而晋升性能.
Item有本人的背景盖住了Selector光标:在xml中给ListView增添一个属性:android:drawSelectorOnTop="true"这样光标就会跑到Item上面的图层,解决咱们的问题.
Snippets
多选框ListView
带有进度条的ListView,多个子线程刷新各自的进度,如果子线程许多那么刷新就会变得很频繁,我们可以由一个handler负责同一刷新,这样我们就要以增长一些额定前提限度刷新的次数跟条件
分批加载的原理很简略,给ListView增加一个OnScrollListener监听滚动事件,当用户滚动到屏幕到特定的位置时加载新数据,并给LIstView加一个正在加载的footerView,当加载数据停止时再把这个footerView去掉.
如果有什么疑难,发明bug或者有更好的主意或者提议,或者附件无奈下载.请发邮件至arthurbrown@163.com
Android Listview tracy891110 新版博问上线,帮你解决IT困难 评论:2011年苹果令挪动市场意外的10个失误 Facebook重燃其对在报纸业的兴致 传ARM版Windows 8平板电脑仅支撑Metro界面 谷歌行将对亚马逊开展回击:Siri还是重大要挟 硅谷创业讲演:SoLoMo最热 高效 JavaScript 单元测试 SQL Server优化50法 我们需要真正的软件名目经理 HTML 5 & CSS 3的新交互特征 我为什么向后端工程师推举Node.js 更多常识库文章... China-pub 2011秋季教材巡展 China-Pub 计算机绝幅员书按需印刷服务 WebService Android Listview MessageQueue 2011年10月(1) 2011年9月(1) 2011年7月(2) 2011年6月(2)
[复制给好友] [打印] [关闭] [返回] [顶部]
上一篇:假如你始终被蒙在了鼓里
下一篇:与水亲热就更是不要理由.水里的美女是丽人鱼
相关分类
不知从什么时候起,我喜欢上了英雄合击传奇,爱上了寂寞!从曾经的年少轻狂到如今的笑依旧,泪无痕之间究竟有多少的悲痛,又有谁知晓英雄合击传奇…拜曾经回忆所赐,有时的一句歌词一段感语都能深深的触动我的内心,可即使内心再痛,我都在微笑!有人说,表现出的一切无所谓都是对内心的一种遮掩!是的,我承认我是在隐藏自己,1.80飞龙版本究竟为什么,我不知道,1.85无英雄我只知道心痛了,那种痛法让我刻骨铭心,痛的我无力在去承受它!还有人说,1.95皓月版本传奇其实生活就是刀刃上的蜂蜜,当蜜舔完了再去舔它就只剩下痛了!我的年少轻狂使我被蜂蜜所迷惑,狠狠的舔下一口,刚刚享受到香甜的时候却给我留下了一条深深的伤口!当我从伤痛中恢复后,再看到蜂蜜时便会想起隐藏在下面的刀刃,刚开一秒传奇固然诱人,可那刻骨铭心的痛让我只能狠心拒绝它的诱惑!
Copyright ? 2004 - 2010 1.80飞龙版本 All rights reserved.
请使用1024*768分辨率浏览本站以达到游戏最佳视觉效果
注:本站发布所有游戏信息,均来自互联网,请玩家仔细辨认游戏信息的真实性,避免上当受骗!
拒绝盗版游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间 享受健康生活!