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: }
分享到:
相关推荐
C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) 体验课程
Log::Any::Adapter::FileHandle - 将消息转发到文件句柄的基本 Log::Any::Adapter 概要 use Log::Any qw($log); use Log::Any::Adapter; # Send all logs to Log::Any::Adapter::FileHandle Log::Any::Adapter->...
C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) (Level 300)
docker load -i prometheus-adapter-v0.9.1.tar.gz ; docker images |grep k8s.gcr.io/prometheus-adapter/prometheus-adapter
赠送jar包:sentinel-spring-webmvc-adapter-1.8.0.jar; 赠送原API文档:sentinel-spring-webmvc-adapter-1.8.0-javadoc.jar; 赠送源代码:sentinel-spring-webmvc-adapter-1.8.0-sources.jar; 赠送Maven依赖信息...
NULL 博文链接:https://lbay.iteye.com/blog/784874
Adapter-Hub网站 该存储库构建了我们的网站 。 它由Flask, ,Bootstrap和GitHub Pages提供支持。 探索页面的所有内容均从提取。 所有内容贡献都应在此处进行。 建造 :hammer_and_wrench: 克隆此存储库并更新来自...
prometheus-adapter:v0.10.0
基于类的Adapter模式的一般结构如下:Adaptee类为Adapter的父类,Adaptee类为适配源,适配目标(接口)也是Adapter的父类;基于类的Adapter模式比较适合应用于Adapter想修改Adaptee的部分方法的情况。 基于对象的...
加入Monster GraphQL工具适配器 通过Apollo 服务器软件包使用SQL生成和查询批处理功能。 这个包是做什么用的? 假设您有一个用于论坛网站的GraphQL架构,该架构是使用定义的,如下所示: const typeDefs = ` ...
JEP176:2018 ADAPTER TEST BOARD RELIABILITY TEST GUIDELINES - 完整英文电子版(20页) .zip
Chapter 8: Adapter Chapter 9: Bridge Chapter 9: Bridge Chapter 11: Mediator Chapter 12: Observer Chapter 13: Composite Chapter 14: Iterator Chapter 15: Visitor Chapter 16: Decorator Chapter 17: Chain ...
Mobile_Adapter使用create-react-app的前端适配方案px 转 rempx 转 vw 或者 px 转 vh 使用 `create-react-app`脚手架创建项目或者使用本例中两个示例模板创建(`npm install`) 根据不同的适配方案,使用不同的文件...
react-native-navigation-v1-v2-adapter 将本机导航v1转换为v2适配器 :warning: 不需要维护! 该库不再维护。 如果您有兴趣接管或希望吸引我们关注即将进行的公关,请在ping @yogevbd或@guyca 正在安装 要求 节点>...
Oracle Solaris 8 Platform Notes: SunFDDI Adapter-24
Oracle Solaris 8 Platform Notes: SunFDDI Adapter-34
XAdapter Support for the pull-down refresh loading and the addition of multiple header and footer RecyclerViewAdapter Blog:https://7449.github.io/Android_XAdapter/ Screenshots ...
用于《vue3移动端适配的解决方案》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/127734001
Oracle Solaris 9 - Platform Notes: SunFDDI Adapter-42
赠送jar包:sentinel-api-gateway-adapter-common-1.8.0.jar; 赠送原API文档:sentinel-api-gateway-adapter-common-1.8.0-javadoc.jar; 赠送源代码:sentinel-api-gateway-adapter-common-1.8.0-sources.jar; ...