ListView 是Android 中一种常用的组建, 需要配合适配器(adapter), 实现一个列表的效果。 Android中有若干View组建,都是需要适配器来加载数据的。
1)ArrayAdapter
ListView 常见的适配器有两种,一种是ArrayAdapter, 使用较为简单。
private ListView mListView;
private ArrayAdapter<String> mArrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listview_main);
//1. 新建适配器
//context, 列表项,数据源
//3.加载数据源
String[] mail={"mail1","mail2","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3","mail3","mail1","mail2","mail3"};
mArrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mail);
//3.ListView加载适配器
mListView.setAdapter(mArrayAdapter);
}
其中,R.layout.simple_list_item_1, 是一个单行的TextView,正好与数组mail[] 对应,填充进去
2) simpleAdapter
相比于ArraryAdapter, simpleAdapter 可以实现更加单个Item 包含多个view组建。
现在想一下,ArraryAdapter对应单层数据结构,因此用数组就可以完成适配。但是simpleAdapter是一个表的结构,是一个二维的结构,因此应该对应一个hashmap.组成的list。
对于单个Item,hashmap的key 就是item种view的id, key对应的值就是view 的填充值(如textView 对应String,imageView对应Int 图片Id)。
整个ListView又是由许多Item组成,因此与之适配的数据是以map为元素的list. 既
List<? extends Map<String, ?>> //? 可以是object, 或其任意子类,比如int, string. 别的值一般也填不进去
private ListView mListView;
private SimpleAdapter mSimpleAdapter;
private List<Map<String,String>> mailList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listview_main);
//simpleAdapter()
/*参数包括
* context:上下文
* data: 数据源 ( List<? extends Map<String, ?>> ) 一个map 组成的List 集合
* 每一行,也就是一个Map<String, ?>,对应listView 中的一个Item。(因为每一个Item包含好几个组建)
* 每一个String 就是Map中的一个Key值,必须包含From中指定的Key
* resource:列表项的布局文件????
* from: map 中的Key名,
* to:绑定listView 中 Item 的Id, 与from 对应
*/
//1. 初始化适配器
int [] to ={R.id.textview_address,R.id.textview_title,R.id.textview_preview};
String [] from={"address","title","preview"};
mailList=new ArrayList<Map<String,String>>();
mSimpleAdapter=new SimpleAdapter(this, getMails(), R.layout.list_item, from, to);
mListView.setAdapter(mSimpleAdapter);
}
/**
* @return 邮件列表
*/
private List<Map<String,String>> getMails() {
for(int i=0;i<17;i++){
Map<String, String> map= new HashMap<String, String>();
map.put("address", "mail_address@163.com"+i);
map.put("title", "title"+i);
map.put("preview", "网易养猪场坐落于浙江省湖州市安吉县,总面积约1200亩...");
mailList.add(map);
}
return mailList;
}