=====================================
节选,完整在后面附件
=====================================
8 使用具有选择作用的部件---Adapter
在之前我们所看到的基本控件,均可以保存一些数据,也可以设置一定的格式让用户输入。比如只输入数字或者电话号码。这样的设置能保证在手机的优先输入设备上快捷的输入手机号码或者别的数据信息。
当然,我们在使用桌面控件的时候,最常用的可能就是带有选择性质的空间了,经典的如listbox,combobox,drop-down list等等。这些都是c/s程序常见的控件。Android也为我们提供了具有类似功能的部件。
更重要的是,当然这也是android的特点了,android为我们提供了一个灵活的框架,用来更自由的决定选项中填充的是什么数据。
尤其需要了解的就是,android使用了一个称作数据适配器(adapter)的框架来进行数据的存放。通过适配器,我们可以保存数组(Arrays),或者数据库内容(database content)。
接下来我们正式认识下:
适配特定的环境
抽象角度来看,adapter们提供了一个公共的接口用于封装不同的APIs。更进一步说,适配器为小部件们提供了一个访问各种数据的接口。
Android所提供的适配器,主要是负责将保存的数据以花名册的形式依次显示在特定的部件中去,并经进行目录的选择等操作。
使用ArrayAdapter(数组适配组)
ArrayAdapter是最简单的适配器。我们所需要做的事情就是将一组数组数据保存到java.util.List 的实例中去。
可以看到,数组适配器的构造方法拥有三个参数。
l Context 上下文,相当于画布,我们可以理解为你要想显示的部件是在哪个界面(Activity)中的。那么那个Activity就是这个Context了
l Resource ID :一个View的ID,我们这里常用来引用的是布局中的各种样式
l 第三个参数,就是我们实际要展示的数据数组了。
默认情况,在列表(List)中展示数据,ArrayAdapter将会自动调用每一个Object数据的toString()方法用于自适应(wrap_类型)空间。
我们上面代码中使用的第二个参数
Android.R.layout.simple_list_item1 ,是系统提供的(因为是android 开头的哦)
表示我们使用列表展示数据的时候,这些数据都是文本类型,如果需要展示图片啊,或者带有选择按钮的,那么就要是用系统提供的别的样式了,在eclipse中很容易看到别的样式。
那么,我们一般是使用 list或者spinner来展示这个数组适配器
Ps:我们可以参考官方API中的例子来学习~
你可以继承ArrayAdapter这个类,然后重写getView()方法,得到你自己的View哦。
getView()接受三个参数
1:要显示的view的索引
2:一个存在的view来更新指定位置的数据。如果没有这个view,你需要自己实例化一个对象来展示数据哦
3:用于保存view的部件。有比较
上面的例子中,适配器使用返回的就是一个TextView,仅仅是文字展示。如果你想返回复杂点的,那么完全可以自定义适配器,然后返回你希望返回的数据哦
其他的一些重要的适配器
在android中,除了arrayadapter以外,你可能还会使用的有
l CursorAdapter :光标适配器。把一个Cursor(光标),典型的情况是来自于一个content provider(之前介绍过,一般保存数据库的数据的),显示在view中
l SimpleAdapter:将xml文件中的数据转换到界面中去
l ActivityAdapter,和ActivityIconAdapter: 通过一个特定的intent,可以使用活动activi的名字或者图标就能调用相应的活动。
我们看看如何使用
我们印象中,最常见的选择性的控件应该就是列表了。在android中,为我们提供了ListView这个部件。它提供ListBox一样的功能。我们可以调用setAdapter()方法,来为一个ListView填充数据。通过setOnItemSelecterdListenter()方法来注册这个ListView,监听选择状态。
注意,上面的情况是,我们使用普通的Activity来包含这个ListView。
但是,如果你的Activity中只是纯粹的一个List的话,那么我们推荐你是用Activity的子类:ListActivity。而不是使用普通的Activity。如果你的主界面就只是list,那么你甚至不需要提供一个Layout布局,因为ListActivity在构造的时候就已经包含了一个完整的屏幕。如果你希望自定义你的布局,只要你给listview 的id一个值,比如 @android:id/list,那么ListActivity就可以根据id找到这个ListView
下面看看例子
一个文本,一个list
Java代码中,填充数据应该这样做:
界面:
知道如何使用了吧~~~很简单哦。。
下拉列表的使用(Spinnner)
在android中,所提供的Spinner这个部件跟传统的下拉列表的作用是一样的。按住下拉列表,就会弹出一个界面,上面列出列表中的所有选项供你选择。默认的下拉列表是只能选中一个。
如何使用它呢?其实啊,跟ListView用法是一样的。
你只要提供一个适配器,用于保存数据,通过setAdapter()方法就可以把数据绑定
你可以通过setOnItemSelectedListener()方法来监听选择状态。
如果你想改变Spinner上显示列表的界面样式,那么你需要进行相应的配置。注意,我们修改的不是部件(即Spinner),而是适配器。我们使用适配器的setDropDownViewResource()方法来使用由ResourcesId所提供的样式。
这是一个简单的下拉列表的例子。
Java代码中填写
只需要注意到Activity这个类实现了AdapterView的选择的那个接口即可
使用起来也很简单