Adapter软件设计模式在Android中的应用
 

1.本文摘要    3
2.界面体验    4
2.1.ListView显示声音文件列表    4
2.2.Grid显示图片列表    5
2.3.Gallery显示图片    6
3.界面元素的分解    6
4.Adapter的由来    8
5.Adapter接口    9
6.ArrayAdapter    9
6.1.成员变量    9
6.2.函数getCount     10
6.3.函数getItem    10
6.4.函数getView    10
7.Adapter类图    11
8.Activity和Adapter的关系    12
8.1.ListActivity    12
8.2.GridView    13
9.ListView,GridView和Gallery开发步骤    14
10.开发中的一个小技巧    15
11.示例代码    15
11.1.继承Activity定义自己的Activity    15
11.2.使用XML定义自己的Activity的Layout    16
11.3.使用XML定义自己的子Item的视图    16
11.4.实现自定义Adapter。一般基类是BaseAdapter    17
11.5.在onCreate函数中获取GridView实例,设置好自己定义的Adapter    18
12.总结    18
1. 本文摘要
Android虚拟项目中,我做的是媒体播放器部分。里面有一个功能就是需要让用户选择一个文件如mp3,然后进行播放。也就是说需要以列表的方式显示媒体列表让用户进行选择。这样就用到了ListActivity。同时对于图片浏览,开始的想法是操作上和PC上一致,也就是以
缩略图的方式供用户选择,然后使用ImageView显示选择的图片。这样就用到了GridView。不过Android对图片似乎有更好的诠释,那就是Gallery。翻译成中文就是长廊。有点象是画展中的画廊的概念,非常的形象。
在对ListActivityListViewGridGallery的学习和使用中,我发现Android广泛的利用了Adapter软件设计模式。通过这种设计模式,可以非常方便的开发出非常人性话的界面,同时对于数据,显示以及显示的维护做到了非常好的分离,非常的符合软件设计模式中数据和显示分离,低耦合度的思想。
本文通过实际的例子,一方面是希望开发人员不仅能体会到Android开发人性化界面的方便,另一方面是希望开发人员在开发ListViewGridGallery的时候能知道需要实现哪些类,哪些函数,同时也能知道为什么需要实现类和函数。再者就是再次体会Adapter软件设计模式的优点,能对以后的软件开发设计起到一定的帮助和指导。
2. 界面体验
2.1. ListView显示声音文件列表
声音列表的显示方式可以多样的。可以只是显示声音文件名,也就是只有一个TextView,也可以显示成如上左图的显示一个声音图片和文件名,点击每个Item的时候触发事件。也可以如上右图显示图片,文件名,歌唱家,声音的时长,同时显示一个按钮,当用户点击按钮的时候触发相关事件。
2.2. Grid显示图片列表
上面的左图是Android开机的界面,他显示了当前所有注册为LAUNCHER的应用。可以看到在一个网格中的每一个Item不仅显示了一个图片,还包括文字。
上面的右图是仿照左图所做的一个示例程序。同样是显示一个图片和相关的问题。把他列出来是想说我们自己也能实现这种看似复杂的界面。
2.3. Gallery显示图片
这个界面由两部分组成。一个是上面的Gallery,显示的是所有的图片的一个列表。下面是ImageView。当选择Gallery中的一个图片时,ImageView会显示其大的图片,这样来实现图片的浏览。下面的ImageView不是本文的重点,本文的重点是上面的Gallery。下面会做一些详细的探讨。
3. 界面元素的分解
下图是对ListActivity的一个界面分解。可以看到最大的一个容器是Activity。其包括一个TextView显示字符串XBtnList,一个ListView显示了文件的详细列表。其中ListView又是一个Container,他包括了一个子View。这个子View我们可以自己定制。这里包括一个ImageView,三个TextView和一个ImageButton
上面的分析我们可以这样理解。Activity负责其子View的显示。也就是XBtnList字符串的显示和ListView的显示。ListView负责其每个ItemListViewlistview控件在哪里中的显示,但具体到每个Item视图如何显示,ListView并不负责。每个子Item试图的显示是由他自己来负责。也就是ImageView显示什么样的图片,三个TextView显示什么样的文本,字体,颜,ImageButton显示什么样的图片,以及这些View在子Item视图中的显示位置,内容由子Item试图来实现。
Grid做同样的分析,具有同样的结果。也就是Activity负责子视图即Grid视图的在Activity中的显示。而Grid中具体显示什么样的元素由子包含的子View来负责。在上面的例子中每个子View实际上包括一个ImageView和一个TextView
同样的对于Gallery。也是由Gallery来负责其每个子View的显示。子view负责自己的显示。可以只包含一个ImageView,也可以是只有一个TextView,还可以是一个ImageView和一个TextView的组合。
4. Adapter的由来
对于ListViewGridGallery来说,其显示的是一个列表,也就是多个数据。那么这些数据从哪里来呢,数据和ListView是怎么关联起来的呢?
一般来说,数据可以来自一个数组,一个List,或者数据库中的游标。这些是程序开发中用到的非常多的数据集合的表示方式。但是ListView和数据并没有直接的关系,主要的原因是数据可以来自不同的方式,ListView需要的数据可以是数据中的一个子集,另一个原因是ListView还需要显示每个子View。而子View如何显示数据是不负责的。否则就有违数据和显示分离的思想。
这样,我们就必须在数据和ListView中间加入一个第三者来关联数据和ListView,不仅能获取到数据,而且能把获取到的数据以自己定制的方式呈现出来,并把这个呈现转交给ListView来进行显示。