ListView和所要展示的内容(即数据源)之间需要Adapter(适配器)来实现。
Adapter是一个桥梁,对ListView的数据进行管理,根据数据来源不同,所使用的Adapter不同。
1.常用Adapter
- ListView在显示之前需要使用setAdapter(ListAdapter adapter)方法!
- ListView本身是继承自ViewGroup的一种容器,它只设定摆放在它里面的View的排列规则,不设定该View是什么样的,而View是怎么样的需靠ListAdapter里面的getView方法来确定,另外我们设置的数据就是它的数据源,这样就提高了ListView显示的灵活性,只要设置不同的ListAdapter实例对象,就会生成不一样的ListView。
- ListAdapter是一个接口,凡是实现了该接口的实例对象都可以被ListView等需要ListAdapter的View使用,ListView的实现中存在一种设计模式叫策略模式,ListView显示什么和显示的效果是根据选择ListAdapter不同的实现类这个策略来实现的,这样就让ListView的显示和数据分开了,从而ListView的显示就更加灵活。
onCreate()函数中:
ListView listView = (ListView) findViewById(R.id.mListView);
setListAdapter(listView);
setListAdapter()函数中:
HashMap<String, Object> map1 = new HashMap<String, Object>();//准备数据
map1.put("data0",R.drawable.qq2);
map1.put("data1", "Cat");
map1.put("data2", "爱吃鱼");
data.add(map1);
HashMap<String, Object> map2 = new HashMap<String, Object>();
map2.put("data0",R.drawable.qq3);
map2.put("data1", "Fox");
map2.put("data2", "天生我材必有用");
data.add(map2);
SimpleAdapter simpleAdapter = new SimpleAdapter(this,data,//准备数据适配器
R.layout.listview_qq,
new String[]{"data0","data1","data2"},//对应HashMap中的Key
new int[]{R.id.qq_image,R.id.qq_name,R.id.qq_text});
listView.setAdapter(simpleAdapter);//装载到listView中
2.自定义Adapter
(1)实现ListAdapter接口,因为BaseAdapter部分实现了ListAdapter,所以直接继承自BaseAdapter就可以了。
(2)BaseAdapter是抽象类,那么复写里面的抽象方法就可达到一般要求了。
(3)复写完成后在setAdapter中传入写好的Adapter类的实例对象。