常用适配器:均继承自BaseAdapter
- ArrayAdapter
- SimpleAdapter
- SimpleCursorAdapter
适配器的定义:把数据与界面绑定起来。适配器连接后端数据与前端显示的接口,把数据弄得更合适,便于在View上显示。
一、ArrayAdapter
1、定义:数组适配器,将数组的多个值包装成列表项,只能显示一行文字,是最简单的适配器。
2、数据源:String[] 或List
例一:以String[]为数据源
//字符串数组,作为数据源
String[] ctype=new String[]{"全部","美术","音乐","体育"};
//设置常量(final)数组适配器,内含元素为字符串,第一个参数this为上下文指针
// 第二个参数android.R.layout.simple_spinner_item为android提供的外观形式,第三个参数为将数据源装载入适配器中。
final ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,ctype);
//设置下拉菜单样式,android.R.layout.simple_spinner_dropdown_item为android提供的外观样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//获取下拉列表框
Spinner spinner= (Spinner) findViewById(R.id.spinner);
//将ArrayAdapter 添加Spinner 对象中
spinner.setAdapter(adapter);
//事件监听器,此时为:项目被选择时监听器
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
//获取选中值,并将其变成字符串。
String str = adapterView.getItemAtPosition(i).toString();
//输出
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
例二:以List为数据源
int[] imageid=new int[]{
R.drawable.t1, R.drawable.t2, R.drawable.t3,
R.drawable.t4, R.drawable.t5, R.drawable.t6,
R.drawable.t7, R.drawable.t8, R.drawable.t9
};
String[] title=new String[]{
"陈1","陈2","陈3","陈4","陈5","陈6","陈7","陈8","陈9"
};
//数据源为List
List<Map<String,Object>> listitem=new ArrayList<Map<String,Object>>();
//将数据放入List
for(int i=0;i<imageid.length;i++)
{
Map<String,Object> map= new HashMap<String,Object>();
map.put("image",imageid[i]);
map.put("name",title[i]);
listitem.add(map);
}
//设置并将数据放入适配器,第一个参数为上下文指针,第二个参数为数据来源,第三个参数为XML实现文件
//第四个参数为List中的两个子项,第五个参数为listitem中的两个TextView ID
SimpleAdapter adapter=new SimpleAdapter(this,listitem,R.layout.main,new String[]{"name","image"}
,new int[]{R.id.title,R.id.image});
//获取xml中的listview
ListView listview= (ListView) findViewById(R.id.listview);
//将适配器放入listview中
listview.setAdapter(adapter);
//设置事件监听器
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Map<String,Object> map=(Map<String,Object>)adapterView.getItemAtPosition(i);
Toast.makeText(MainActivity.this, map.get("name").toString(), Toast.LENGTH_LONG).show();
}
});
}
二、SimpleAdapter
1、SimpleAdapter有最好的扩充性,可以自定义出各种效果
2、数据源:String[] 或List
例子同上,将ArrayAdapter改成SimpleAdapter即可。
三、SimpleCursorAdapter
1、定义:SimpleCursorAdapter一般主要用于数据库,它的数据来源一般都是数据库查询得到的Cursor。
//因为还没学到,暂且留空。
四、自定义适配器
1、定义:DIY一个适配器,继承自BaseAdapter。