android开发——说说Adapter那些事
2012-04-28 08:57
197 查看
Adapter在Android中占据一个重要的角色,它是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如图1直观的表达了Data、Adapter、View三者的关系。
图1 Adapter、数据、UI三者关系(PS:此图来自Google I/O)
一、Android中Adapter
图2:Android中Adapter类型层级图
由图2我们可以看到在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。
BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
ArrayAdapter支持泛型操作,通常需要实现getView方法,特殊情况下(结合数据row id),为了让ui事件相应处理方便点最好重写getItemId;
SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。
二、一个继承BaseAdapter的类的代码段
图1 Adapter、数据、UI三者关系(PS:此图来自Google I/O)
一、Android中Adapter
图2:Android中Adapter类型层级图
由图2我们可以看到在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。
BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
ArrayAdapter支持泛型操作,通常需要实现getView方法,特殊情况下(结合数据row id),为了让ui事件相应处理方便点最好重写getItemId;
SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。
二、一个继承BaseAdapter的类的代码段
1: /**
2: * 歌曲列表适配器
3: *
4: * @version 2010-11-24 下午05:13:33
5: * @author Hal
6: */
7: public class AudioListAdapter extends BaseAdapter {
8:
9: private Context mContext;
10:
11: // 歌曲集合
12: private ArrayList<Audio> mAudios;
13:
14: public AudioListAdapter(Context mContext, ArrayList<Audio> mAudios) {
15: this.mContext = mContext;
16: this.mAudios = mAudios;
17: }
18:
19: @Override
20: public int getCount() {
21: return mAudios != null ? mAudios.size() : 0;
22: }
23:
24: @Override
25: public Object getItem(int position) {
26: if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
27: return mAudios.get(position);
28: }
29: return null;
30: }
31:
32: /**
33: * 如果集合中的对象数据来自数据库,建议此方法返回该对象在数据库中的ID
34: */
35: @Override
36: public long getItemId(int position) {
37: if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
38: return mAudios.get(position).getId();
39: }
40: return position;
41: }
42:
43: @Override
44: public View getView(int position, View convertView, ViewGroup parent) {
45: //TODO 返回自定的View
46: }
相关文章推荐
- Android开发——说说Adapter那点事
- 那些复杂的列表总要弄个清楚——(四)激动人心的BaseAdapter之二
- 说说Adapter那点事l 自定义Adapter
- Javascript之旅——第五站:说说那些所谓的包装类型
- 说说那些我也不太懂的 Python 高阶函数
- 在Adapter中使用Holder的那些坑
- Android Studio配置Android Annotations框架详解--说说那些坑
- 说说redis的那些坑
- 简单说说身边那些和ROS相关的人
- Android Studio配置greenDao框架详解--说说那些坑
- 说说EMC解决方案中的那些产品和案例(一)
- 为了快速Android开发整理出的一套框架,BaseFragment,BaseActivity,RecyleAdapter
- Android开发——说说Adapter那点事
- App Store--心酸的上线路,说说那些不可思议的被拒理由
- 说说封装sdk的那些坑(下)
- Android开发——说说Adapter那点事
- 说说Android6.0动态申请权限的那些坑
- Android开发系列(十九):为SimpleAdapter设置样式
- 说说算法题的那些小题儿(C语言版)
- 简单说说PHP优化那些事