Adapter介绍
Adapter是将数据绑定到UI界面上的桥接类。Adapter负责创建显示每个项目的子View和提供对下层数据的访问。
支持Adapter绑定的UI控件必须扩展AdapterView抽象类。创建自己的继承自AdapterView的控件和创建新的Adapter类来绑定它们是可能的。
一些Android提供的Adapter介绍
在多数情况下,你不需要白手创建自己的Adapter。Android提供了一系列Adapter来将数据绑定到UI Widget上。
因为Android负责提供数据和选择用于显示每个项目的View,所以Adapter能快速地修改要绑定的控件的外观和功能。下面的列表显示了两个最有用和最通用的本地Adapter:
❑ ArrayAdapter
ArrayAdapter是一个绑定View到一组对象的通用类。默认情况下,ArrayAdapter绑定每个对象的toString值到在layout中预先定义的TextView控件上。可变通的,构造函数允许你使用更加复杂的layout或者通过重写getView方法来扩展类从而使用TextView的替代物(如ImageView或嵌套的layout)。
❑ SimpleCursorAdapter
SimpleCursorAdapter绑定View到Content Provider查询返回的游标上。指定一个XML layout定义,然后将数据集中的每一列的值绑定到layout中的一个View上。
接下来的章节将深入挖掘这些Adapter类的细节。例子中,提供了绑定数据到ListView上,尽管这个逻辑会和其他一些AdapterView类(如Spinner和Gallery)工作的一样。
使用Adapter进行数据绑定
将Adapter应用到继承自AdapterView类上,你需要调用View的setAdapter方法,传入一个Adapter实例,如下面的片段所示:
ArrayList<String> myStringArray = new ArrayList<String>();
ArrayAdapter<String> myAdapterInstance;
int layoutID = android.R.layout.simple_list_item_1;
myAdapterInstance = new ArrayAdapter<String>(this, layoutID, myStringArray);
myListView.setAdapter(myAdapterInstance);
这个片段显示了最简单的情况,将数组中的字符串绑定到ListView中用于显示每个项目的简单TextView控件上。
接下来的第一个例子显示了如何绑定一组复杂的对象到ListView上,使用一个自定义的layout。第二个例子显示了如何使用SimpleCursorAdapter来绑定查询结果到ListView中的自定义layout上。
今天收到从 Nokia 芬兰总部 DHL 国际快递过来的 N900 ( N900 的来历详情见此) ( DHL 还真快, 2 天就送到了!)
里面附有 Nokia 宣传促销负责人 Katja 的亲笔信(她也就是上次抽奖的那个 mm 哦~~~)
开箱, 包装比 Droid 要正很多!
还有很多配件, 里面竟然有输出音频和视频的连接线
开机屏幕(和 Droid 对比), Droid 稍微大点
浏览器对比, N900 浏览器速度比 Droid 快了貌似一倍
N900 可以直接在浏览器里面播放Flash(图里是油条帮的视频)
下面 Droid 是内置 YouTube 的 app 在播放宽屏高清视频,同一个视频对比, Droid 的质量是明显高了几个档次。
使用一天后的感受
- N900 是移动计算平台( Mobile Computing Platform ), 然后带有电话功能. 和 Android 从开发的出发点就是移动手机系统, 有本质上的区别. 这也决定了两个平台很不同的设计哲学.
- Maemo 是比 Android 更底层, 更接近 Linux 的系统. Android SDK 是 Linux 封装后的一个应用层接口, 适合开发应用软件. Maemo 可以直接开发系统级软件, 而且很多 Linux 的项目可以很方便的移植过来.
- N900 上的 3D 游戏: Bounce. 使用了加速仪 Accelerometer 和 OpenGL ES. 画面很不错, 和 iPhone 的 3D 游戏不相上下; 比 Android 显然已经超越了.
- 还可以输出到电视上玩
- 直接支持多个 Email 系统, 比如 Hotmail, Yahoo, AOL 等. 这比 Android 已经强大多了. Android 目前还没有以上 email 的支持.
- 目前还不知道如何同步 gmail 里电话联系人到 N900 上, 可以同步 email/gtalk 用户.
- GPS/Map 还没成功过, 不知道是什么原因, 有一次还 crash 了. 这点 Android 上的 Google Map 真是强大. 没得比.
- 据说支持 AVI,MPG,等视频格式. 上传几个测试小电影都没播放成功. -___-#
- 下载 N 个软件后, 竟然说没有磁盘空间报错. 后来发现原来是临时下载文件夹满了, 竟然需要重启才能清理掉. 这个设计真傻 X.
- Maemo 已经有 GameBoy, GameBoy Advance, NES 的模拟器了 ^_^
- 电阻屏幕还是没有电容屏幕敏感, 借助自带的笔才有所改善.
- 5 百万像素卡尔.蔡司镜头, 嘿嘿, Nokia 硬件向来都不错.
Maemo 5 会是个强大的移动计算平台, 但和专攻智能手机平台的 iPhone 和 Android, 显然还有较大的差距.
iPhone 可以说是目前最强大的 OS, 越狱后的 iPhone 比 Maemo 5 还强大; 然后 iPhone 自带的 SDK 比 Android 在很多方面都强大. 非常佩服设计 iPhone OS 的 Apple 团队.
Android 是个应用层的操作系统, 开发者其实和底层的 Linux 没怎么打交道. 这点可以让手机开发商抢占中低端智能手机市场, 但高端市场目前唯有 iPhone OS 在鹤立鸡群中.
当然最后还是要感谢下 Nokia Maemo 团队相送的 N900, 我会慢慢摸索滴~~~~~
补充几点:
- Droid 机重 6 盎司, N900 机重 6.4 盎司, N900 几乎比 Droid 厚一倍
- N900 前端还有个摄像头, 估计可以视频通话了. 双摄像头还可以开发很多有趣的应用.
- N900 电池损耗很快, 大概 6 个小时内会全部用完… 1320 mA 的电池啊! 和 Droid 一样.
- Droid 屏幕比 N900 更清脆, 做工质量更好
- Android 的 SDK 比 Maemo 的要更容易开发, 强大的平台还需要开发者的青睐才行!
如果上天再给我一次选择的机会,我一定会选择IPHONE,可惜,没钱了...如果让我给人推荐,IPHONE绝对是不二的选择!!!
虽然勉强可以说Android是一个“Linux 发行版”,但是这个“发行版”和其它Linux发行版还是有点区别的。GNU老大之所以老是抱怨Linux应该叫GNU/Linux,是因为通常的Linux发行版在应用层严重依赖于GNU库和软件集。Maemo和其他桌面Linux发行版模式差不多,主要的工作就是封装了一套适合小屏幕的GUI库以及其他辅助的库,其核心和桌面系统没有什么区别,因此桌面应用程序可以比较容易地移植到Maemo上,例如我只要花半天时间就可以让RubyGnome2在Maemo上跑起来。
而Android不同。Android在应用层建立Dalvik JVM,所有的"Android app"都是在这个JVM中运行。在Linux ABI之上,除了libc,Android没有依赖多少库,甚至连shell都不用提供。所有的辅助的库(例如多媒体解码等)都是为Dalvik服务,通过JVM暴露给应用程序API。Android通过JVM隔离了应用程序与内核,Java运行环境是Android的official环境。
因此,想通过简单的交叉编译来移植一个桌面程序到Android并不容易,有时候其痛苦程度和自己搞一个发行版差不多。
理解Android和Maemo的架构不同就很好理解N900和Droid的差异了(N900和Droid采用的都是TI的CPU,ARM A8+DSP):
* Maemo和Android的浏览器都是基于WebKit库,但是Maemo上层是C,而Android隔了个JVM,自然Maemo快。而播放媒体,解码部分都是C的份,因此性能不会有太大的差别,而显然Google在媒体解码方面下了更多的功夫因此Droid视频显示效果会好些,如果Android的改进再回馈到社区,N900应该也会有同样的表现。
* 可用性:Maemo是社区贡献多,Nokia在幕后操纵;而Android是Google主导开发,开放给社区。因此Google会花很多努力提供对自己有利的精品app,例如Google Maps;而Maemo则会面临众口难调的问题。但由于Maemo贴近桌面系统,因此在应用程序的多样性方面拥有极大的优势,例如Gameboy模拟器。Android要想在应用程序多样性方面有突破就要看Android Market是否能取得成功。iPhone则是另一个极端,apple完全封闭内核,仅开放SDK。apple完全控制,因此有条件提供一流的可用性,加上app store的成功,程序多样性一样很丰富。
* SDK: Maemo的SDK和桌面系统的SDK类似,开发模式也类似,比较自由,开放。Android只提供基于JVM的SDK,Google定义规范,文档齐全,容易使用。iPhone则延续Apple的一贯作风:有限开放,用框架限制你,但用起来效果很爽。
Maemo是爱好自由者的选择,Android是追求实用并且贪便宜者的选择,iPhone是追求卓越并且想Cool一把的选择。
呵呵,不是闹什么笑话,大家只是技术讨论而已.抛砖引玉.
楼上的rubynroll分析的已经很全面了,而且很深入.
总得来说,android对于开发应用程序的人来说,目前还是很局限于Delvik的JVM,不能算是linux的一个版本.跟以前的J2ME的linux机器是没有本质区别的. 感觉以后NDK有了进一步的发展,才能看出不同来.
但是结果更是迷茫了...在众多智能机面前,我的选择更不清晰,有点跌入大海的感觉。先慢慢来好了,既然有了HTC Magic,我先搞清楚Android..恩恩
iPhone OS还是最强大的, 可进可退, 官方版和越狱版各有所长, 真是大爱.
android自己封装了linux, 一些linux开源社区的同志都很不满, google其实是非常邪恶的
iPhone OS还是最强大的, 可进可退, 官方版和越狱版各有所长, 真是大爱.
android自己封装了linux, 一些linux开源社区的同志都很不满, google其实是非常邪恶的
大牛不敢当,术业有专攻,我只是在嵌入式方面还算了解。
在应用层Android怎么折腾其实和Linux社区关系都不大,麻烦的是Google Android要插手内核,这个惹恼了些人。
狭义上说“Linux”其实仅仅是个内核,Linux内核通过系统调用等方法向应用层暴露功能。和传统Unix不同,Linux内核开发异常活跃,一些大胆的想法不断持续涌现,当这些想法被mainstream采纳以后有可能造成对应用层的接口的变动。这个变动有时候对Linux发行版来说是非常麻烦的,这就是为什么很多Server发行版采用的内核版本都比较”老“,保持稳定是这些Server的一大要求。
同样,Google也不希望Android面临同样的难题,Google希望Linux内核保持相对稳定,因此也想在内核空间也建立一套自己的规范,希望最大限度减少内核升级带来的影响,而这样的规范是不可能在Linux社区得到一致认可的。IBM做不到,RedHat做不到,Google也做不到,因为Linux是属于所有人的。
Linux内核社区存在一些非常有争议的做法与传统,这些就是Linux内核社区的文化,你可以有一千个理由说它不好,但却是它造就Linux,并且继续引领Linux前行,fearlessly.
Google要想让Android稳定,lock-in在一个特定内核版本是不现实的,只能尽量不依赖于Linux的新特性,使用稳定的久经考验的接口(这一点其实Android做的很漂亮,通过JVM搞定一切),适当的抽象,并且通过自己的补丁渠道去弥平内核差异,适当的时候插手一下内核(如电源管理),就算有人不满也就算了,保持低调就行。
反观Maemo,我估计Nokia后面的麻烦事情还多着呢,好在Maemo有一个活跃的社区帮忙擦屁股,但可以断定Maemo核心部件之外的稳定性在很长一段时间内都会有问题,也因此Nokia不会放弃Symbian。
iPhone OS之所以强大,稳定是因为apple有full control:我有multi-tasking,但是我就是不信任你能用得好,就是不开放给你,你能怎样?
因为之前也看过你不少有关android开发的文章,知道你不会无缘由的给出如此评价。我现在正在选型中,虽然说都是linux系统(如果水果硬要算一个的话也可以说是类UNIX系统),你觉得这三个发展前景如何?
不太明白你说的计算平台+电话功能, 和移动智能平台的区别, 解释解释?
另外现在手上有些闲钱,不知道是等Droid呢还是先上个HERO顶一顶,二者硬件方面差别是否很大? 或者有一些Android 2.0的应用在HERO上做不了?
非常感谢!
因为之前也看过你不少有关android开发的文章,知道你不会无缘由的给出如此评价。我现在正在选型中,虽然说都是linux系统(如果水果硬要算一个的话也可以说是类UNIX系统),你觉得这三个发展前景如何?
不太明白你说的计算平台+电话功能, 和移动智能平台的区别, 解释解释?
另外现在手上有些闲钱,不知道是等Droid呢还是先上个HERO顶一顶,二者硬件方面差别是否很大? 或者有一些Android 2.0的应用在HERO上做不了?
非常感谢!
我貌似几天前回复过帖子了啊, JE抽风了????
虽然勉强可以说Android是一个“Linux 发行版”,但是这个“发行版”和其它Linux发行版还是有点区别的。GNU老大之所以老是抱怨Linux应该叫GNU/Linux,是因为通常的Linux发行版在应用层严重依赖于GNU库和软件集。Maemo和其他桌面Linux发行版模式差不多,主要的工作就是封装了一套适合小屏幕的GUI库以及其他辅助的库,其核心和桌面系统没有什么区别,因此桌面应用程序可以比较容易地移植到Maemo上,例如我只要花半天时间就可以让RubyGnome2在Maemo上跑起来。
而Android不同。Android在应用层建立Dalvik JVM,所有的"Android app"都是在这个JVM中运行。在Linux ABI之上,除了libc,Android没有依赖多少库,甚至连shell都不用提供。所有的辅助的库(例如多媒体解码等)都是为Dalvik服务,通过JVM暴露给应用程序API。Android通过JVM隔离了应用程序与内核,Java运行环境是Android的official环境。
因此,想通过简单的交叉编译来移植一个桌面程序到Android并不容易,有时候其痛苦程度和自己搞一个发行版差不多。
理解Android和Maemo的架构不同就很好理解N900和Droid的差异了(N900和Droid采用的都是TI的CPU,ARM A8+DSP):
* Maemo和Android的浏览器都是基于WebKit库,但是Maemo上层是C,而Android隔了个JVM,自然Maemo快。而播放媒体,解码部分都是C的份,因此性能不会有太大的差别,而显然Google在媒体解码方面下了更多的功夫因此Droid视频显示效果会好些,如果Android的改进再回馈到社区,N900应该也会有同样的表现。
* 可用性:Maemo是社区贡献多,Nokia在幕后操纵;而Android是Google主导开发,开放给社区。因此Google会花很多努力提供对自己有利的精品app,例如Google Maps;而Maemo则会面临众口难调的问题。但由于Maemo贴近桌面系统,因此在应用程序的多样性方面拥有极大的优势,例如Gameboy模拟器。Android要想在应用程序多样性方面有突破就要看Android Market是否能取得成功。iPhone则是另一个极端,apple完全封闭内核,仅开放SDK。apple完全控制,因此有条件提供一流的可用性,加上app store的成功,程序多样性一样很丰富。
* SDK: Maemo的SDK和桌面系统的SDK类似,开发模式也类似,比较自由,开放。Android只提供基于JVM的SDK,Google定义规范,文档齐全,容易使用。iPhone则延续Apple的一贯作风:有限开放,用框架限制你,但用起来效果很爽。
Maemo是爱好自由者的选择,Android是追求实用并且贪便宜者的选择,iPhone是追求卓越并且想Cool一把的选择。
虽然咱是嵌入式门外汉,但兄台及楼主的分析让我们了解了很多,容易理解Andriod和Maemo的异同了。
如果上天再给我一次选择的机会,我一定会选择IPHONE,可惜,没钱了...如果让我给人推荐,IPHONE绝对是不二的选择!!!
能否谈谈原因?
如果上天再给我一次选择的机会,我一定会选择IPHONE,可惜,没钱了...如果让我给人推荐,IPHONE绝对是不二的选择!!!
能否谈谈原因?
不要再挖vlinux童鞋的伤疤了...
很赞同,频繁变动的内核的确很麻烦,android用vm封闭底层变动对上层的影响,的确是个好主意!Java+C的组合可以说是性能与变化风险的折衷。
原理不分析了,直接上数据分析
Max: Quat: (quat -0.772327 0.105251 0.0845889 0.620708) OGL: Quat:: -0.772327 , 0.084589 , -0.105251 , 0.620708
Max: Position: [-29.6717,-109.273,7.91964] OGL: Position:: -29.671656 , 7.919643 , 109.272964
Max: Scale: [1.000000, 0.999999, 1.000000 ] OGL: Scale:: 1.000000 , 1.000000 , 0.999999