Adapter是连接后端数据和前端显示的适配器接口,是数据和UI之间的一个重要的纽带。在常见的View等地方都需要用到Adapter

  1. BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性(文本信息和图文混排都可以,图片可以来自于网络)
  2. ArrayAdapter支持泛型操作,最为简单,只能显示一行字(item只有文本信息,数据源String[]或者List<String>)
  3. SimpleAdapter有最好的扩充性,可以自定义出各种效果(item图文混排,List<Map<String,Object>> list)

ListView:

  1. xml文件中添加ListView的控件
  2. 创建Item布局,创建并初始化数据源
  3. 创建并初始化Adapter(可以自定义)
  4. 直接使用setAdapter(adapter)

在这里先介绍两种基本的:
public ArrayAdapter(Context context,int resourceId, String[]/List<String> objects)

这里的三个参数分别为Content:指上下文的content
resourceId:是调用的view的Id,即用来显示item的样式View,可以用系统也可以用自定义view
String[]/List<String>:指数据源,可以是数组也可以是集合

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

参数context:上下文,比如this。关联SimpleAdapter运行的视图上下文

参数data:Map列表,列表要显示的数据,这部分需要自己实现,如例子中的getData(),类型要与上面的一致,每条项目要与from中指定条目一致
参数resource:ListView单项布局文件的Id,这个布局就是你自定义的布局了,你想显示什么样子的布局都在这个布局中。这个布局中必须包括了to中定义的控件id
参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是Map的键
参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from对应

自定义adapter
在这里简单介绍下自定义SimpleAdapter2016-01-07
下面先来看一个例子:

 1 package org.mobile.tral.example.listview_baseadpter;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import android.app.Activity;
 9 import android.os.Bundle;
10 import android.widget.ListView;
11 import android.widget.TextView;
12 
13 public class MainActivity extends Activity {
14     private ListView listView;
15     private TextView textView;
16     private List<Map<String, Object>> list = null;
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         getLayoutInflater();
23         // 初始化数据
24         initData();
25         initViews();
26     }
27 
28     private void initViews() {
29         // TODO Auto-generated method stub
30         listView = (ListView) findViewById(R.id.listView_Main);
31         textView = (TextView) findViewById(R.id.textView_Main);
32         listView.setEmptyView(textView);
33         MyAdapter adapter = new MyAdapter(this, list,
34                 R.layout.item_listview_main, new String[] { "userimage",
35                         "username", "usernum" }, new int[] { R.id.userimage,
36                         R.id.textview, R.id.numview });
37 
38         listView.setAdapter(adapter);
39     }
40 
41     private void initData() {
42         // TODO Auto-generated method stub
43         list = new ArrayList<Map<String, Object>>();
44         for (int i = 1; i < 11; i++) {
45             Map<String, Object> map = new HashMap<String, Object>();
46             map.put("userimage", R.drawable.ic_launcher);
47             map.put("username", "i am " + i);
48             map.put("usernum", i);
49             list.add(map);
50         }
51     }
52 }
MyActivity
 1 package org.mobile.tral.example.listview_baseadpter;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 
 6 import android.app.Activity;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.BaseAdapter;
10 import android.widget.ImageView;
11 import android.widget.TextView;
12 
13 /**
14  * 
15  * @author Earn 实现自定义adapter
16  * 
17  */
18 public class MyAdapter extends BaseAdapter {
19 
20     private List<Map<String, Object>> list = null;
21 
22     private Activity activity;
23     private int resouseId;
24     private String form[] = null;
25     private int[] to = null;
26 
27     public MyAdapter(Activity activity, List<Map<String, Object>> list,
28             int resouseId, String[] form, int[] to) {
29         super();
30         this.list = list;
31         this.activity = activity;
32         this.resouseId = resouseId;
33         this.form = form;
34         this.to = to;
35     }
36 
37     /**
38      * 返回ListView里面Item的数量,数据源的长度
39      */
40     @Override
41     public int getCount() {
42         // TODO Auto-generated method stub
43         return this.list.size();
44     }
45 
46     /**
47      * 返回每一个Item中映射的数据,也就是数据源的元素 position:是点击Item的位置
48      */
49     @Override
50     public Object getItem(int position) {
51         // TODO Auto-generated method stub
52         return list.get(position);
53     }
54 
55     @Override
56     public long getItemId(int position) {
57         // TODO Auto-generated method stub
58         return position;
59     }
60 
61     /**
62      * 返回每一个Item视图的View parent:Item的父视图
63      */
64     @Override
65     public View getView(int position, View convertView, ViewGroup parent) {
66         // TODO Auto-generated method stub
67         //
68         View view = activity.getLayoutInflater().inflate(resouseId, parent,
69                 false);
70 
71         ImageView imageView = (ImageView) view.findViewById(to[0]);
72         TextView nameView = (TextView) view.findViewById(to[1]);
73         TextView numView = (TextView) view.findViewById(to[2]);
74 
75         int resId = (Integer) (list.get(position).get(form[0]));
76         imageView.setImageResource(resId);
77         nameView.setText((String) (list.get(position).get(form[1])));
78         numView.setText(list.get(position).get(form[2]) + "");
79         return view;
80     }
81 }