转载http://book.51cto.com/art/201211/363103.htm
Adapter接口提供了对数据源访问的基本形式,比如取得数据id的方法getItemId(int position),取得数据内容的方法getItem(int position)等,Adapter接口有一个最重要的子接口即ListAdapter接口,这个接口的作用是使ListView控件与数据源之间建立起一个桥梁,通过这个桥梁,ListAdapter接口就可以把数据源中的数据显示到ListView控件中,接口ListAdapter声明如图3.4所示。
图3.4 ListAdapter接口的声明与详细信息 |
从图3.4中可以看到,ArrayAdapter是ListAdapter的直接子类,而ArrayAdapter是泛型类,那么比较好地使用自定义Adapter对象的方式是继承自ArrayAdapter类。
新建extendsArrayAdapter项目,新建Userinfo.java类,有3个属性,即id、username和password。
新建Adapter适配器类文件GhyArrayAdapter.java,代码如下:
Activity对象Main.java核心代码如下:
- package extadapter;
- import java.util.List;
- import android.content.Context;
- import android.widget.ArrayAdapter;
- import entity.Userinfo;
- public class GhyArrayAdapter extends ArrayAdapter<Userinfo> {
- public GhyArrayAdapter(Context context, int textViewResourceId,
- List<Userinfo> objects) {
- super(context, textViewResourceId, objects);
- }
- }
- public class Main extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- List<Userinfo> userinfoList = new ArrayList<Userinfo>();
- for (int i = 0; i < 10; i++) {
- Userinfo userinfo = new Userinfo("" + (i + 1),
- "username" + (i + 1), "password" + (i + 1));
- userinfoList.add(userinfo);
- }
- GhyArrayAdapter adapter = new GhyArrayAdapter(this,
- android.R.layout.simple_list_item_1, userinfoList);
- System.out.println(adapter.getItem(2).getUsername());
- }
- }
程序运行后正确打印出指定索引位置的username属性值,如图3.5所示。
通过这个示例可以看到继承自ArrayAdapter类可以非常方便地操作集合中的数据,而这样的功能在BaseAdapter中却不存在,因为BaseAdapter提供的方法功能非常有限,如图3.6所示。
图3.5 正确打印username值
那么,在上文提到的ListView又是什么呢?下面我们来介绍ListView对象的使用。图3.6 BaseAdapter方法列表
对象ListView是实现一个垂直滚动的列表,列表中的数据来自于ListAdapter对象,它的类声明信息如图3.7所示。
图3.7 ListView对象的声明 所以ListView对象结合ListAdapter的实现类就能实现将ListAdapter实现类中的数据显示到垂直列表中。而ListAdapter接口的实现类有许多,比较常用的有ArrayAdapter对象。
ArrayAdapter对象是ListAdapter的实现类,类声明如图3.8所示。
但在图3.8中并没有看到ListAdapter字样,因为ArrayAdapter类的父类BaseAdapter实现了ListAdapter接口,BaseAdapter类声明如图3.9所示。
图3.8 ArrayAdapter类声明 图3.9 BaseAdapter类声明
默认情况下,ArrayAdapter对象将其中的数据显示到1个TextView控件中,所以在布局文件中一定要有这个TextView控件,但Android本身已经提供了许多默认的布局文件可供程序员使用,不需要再重复创建它们就可以将Adapter中的数据显示到View中。