1.定义
数据适配器是AdapterView视图(如ListView - 列表视图控件、Gallery - 缩略图浏览器控件、GridView - 网格控件、Spinner - 下拉列表控件、AutoCompleteTextView - 自动提示文本框、ExpandableListView - 支持展开/收缩功能的列表控件等)与数据之间的桥梁,用来处理数据并将数据绑定到AdapterView上。
2.作用
数据适配器是连接数据源和视图界面的桥梁。
3.分类
包括ArrayAdapter(数组适配器)以及SimpleAdapter(简单适配器)。其中:
- ArrayAdapter用于绑定格式相对单一的数据,数据源主要是集合或者数组;
- SimpleAdapter用于绑定格式复杂的数据,数据源只能是泛型的集合;
4.实现
- 新建适配器;
- 添加数据源到适配器;
- 视图加载适配器;
5.案例
(1)具体用到的类:
- ArrayAdapter(上下文,当前ListView加载的每一个列表所对应的布局文件,数据源)
- SimpleAdapter(context,data,resource,from,to)其中,context:上下文,data数据源(List<? extends Map<String,?>> data)一个Map所组成的List集合) 每一个Map都会去对应ListView列表中的一行 每一个Map(键-值对)中的键必须包含所有在from中所指定的键,resource:列表项的布局文件ID,from:Map中的键名(String[]格式),to:绑定数据视图中的ID,与from成对应关系(int[]格式);
(2)代码实例:
- ArrayAdapter
ListView listView;
ArrayAdapter arrayAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_violet);
listView = (ListView) findViewById(R.id.listView);
String[] data={"苹果","香蕉","桃子","西瓜"};
arrayAdapter=new ArrayAdapter(this,R.layout.abc_simple_dropdown_hint,data);//上下文,当前ListView加载的每一个列表所对应的布局文件,数据源)
listView.setAdapter(arrayAdapter);
}
- SimpleAdapter
ListView listView;
SimpleAdapter simpleAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_violet);
listView = (ListView) findViewById(R.id.listView);
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
String[] persons = {"张老师", "陈老师", "李老师", "黄老师"};
String[] phoneNums = {"18706218201", "18706214521", "13908761231", "18512390812"};
for (int i = 0; i < persons.length; i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("username", persons[i]);
map.put("phoneNum", phoneNums[i]);
//插入图片
map.put("photo",R.drawable.cc);
data.add(map);
}
//(context,data,resource,from,to)
simpleAdapter = new SimpleAdapter(this, data, R.layout.list_item, new String[]{"username","photo", "phoneNum"}, new int[]{R.id.username,R.id.photo, R.id.phoneNum});
listView.setAdapter(simpleAdapter);
}