Adapter是连接后端数据和前端显示的适配器接口,是数据和UI之间的一个重要的纽带。在常见的View等地方都需要用到Adapter
- BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性(文本信息和图文混排都可以,图片可以来自于网络)
- ArrayAdapter支持泛型操作,最为简单,只能显示一行字(item只有文本信息,数据源String[]或者List<String>)
- SimpleAdapter有最好的扩充性,可以自定义出各种效果(item图文混排,List<Map<String,Object>> list)
ListView:
- xml文件中添加ListView的控件
- 创建Item布局,创建并初始化数据源
- 创建并初始化Adapter(可以自定义)
- 直接使用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 }

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 }
拥有时间,就是拥有一切。
浙公网安备 33010602011771号