您的位置:首页 > 移动开发 > Android开发

Android开发——说说Adapter那点事

2010-12-01 15:44 483 查看
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:
/**

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:
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: