千家信息网

Android中如何实现适配器模式

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,今天小编给大家分享一下Android中如何实现适配器模式的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们
千家信息网最后更新 2025年01月22日Android中如何实现适配器模式

今天小编给大家分享一下Android中如何实现适配器模式的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.意图
适配器模式,把一个类的接口变换成客户端所期待的另一种接口,从而使原本不匹配而无法在一起工作的两个,类能够在一起工作。
适配器模式分为类适配器模式和对象适配器模式。
关于类适配器模式,因为java的单继承,如果继承一个类,另外的则只能是接口,需要手动实现相应的方法。
热门词汇:类的适配器模式 对象的适配器模式 缺省适配器模式 源类 目标接口

2.结构图和代码

为了简明直接,我省略了相关的其他适配器 ,只以此两个适配器为例。
ListViews做为client,他所需要的目标接口(target interface)就是ListAdapter,包含getCount(),getItem(),getView()等几个基本的方法,为了兼容List,Cursor等数据类型作为数据源,我们专门定义两个适配器来适配他们:ArrayAdapter和CursorAdapter。这两个适配器,说白了,就是针对目标接口对数据源进行兼容修饰。
这就是适配器模式。
其中BaseAdapter实现了如isEmpty()方法,使子类在继承BaseAdapter后不需要再实现此方法,这就是缺省适配器,这也是缺省适配器的一个最明显的好处。

我们以最简单的若干个方法举例如下,ListAdapter接口如下(,为了简单,我省略了继承自Adapter接口):

public interface ListAdapter {      public int getCount();      Object getItem(int position);      long getItemId(int position);      View getView(int position, View convertView, ViewGroup parent);      boolean isEmpty();  }

抽象类BaseAdapter,我省略其他代码,只列出两个方法,以作示意:

public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {      // ... ...      public View getDropDownView(int position, View convertView, ViewGroup parent) {          return getView(position, convertView, parent);      }      public boolean isEmpty() {          return getCount() == 0;      }  }

ArrayAdapter对List进行封装成ListAdapter的实现,满足ListView的调用:

public class ArrayAdapter extends BaseAdapter implements Filterable {      private List mObjects;      //我只列出这一个构造函数,大家懂这个意思就行      public ArrayAdapter(Context context, int textViewResourceId, T[] objects) {          init(context, textViewResourceId, 0, Arrays.asList(objects));      }      private void init(Context context, int resource, int textViewResourceId, List objects) {          mContext = context;          mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          mResource = mDropDownResource = resource;          mObjects = objects; //引用对象,也是表达了组合优于继承的意思          mFieldId = textViewResourceId;      }      public int getCount() {          return mObjects.size();      }     public T getItem(int position) {          return mObjects.get(position);      }      public View getView(int position, View convertView, ViewGroup parent) {          return createViewFromResource(position, convertView, parent, mResource);      }      // ... ...  }

我们就如此成功的把List作为数据源以ListView想要的目标接口的样子传给了ListView,同理CursorAdapter也是一模一样的道理,就不写具体代码了。
适配器本身倒是不难,但是提供了解决不兼容问题的惯用模式。
关于什么时候使用适配器模式,大概有三种情况:
(1). 你想使用一个已经存在的类,而它的接口不符合你的需求,这个在处理旧系统时比较常见。
(2). 你想创建一个可以复用的类,该类可以和其他不相关的类或不可预见的累协同工作,这就是我们android开发者经常碰到的情况:我们常常自定义一个新的Adapter。
(3). 你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口,对象适配器可以适配他的父类接口。

以上就是"Android中如何实现适配器模式"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

适配 适配器 模式 接口 就是 两个 方法 对象 数据 目标 知识 篇文章 代码 子类 数据源 工作 内容 情况 意思 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发实习刚转正工资 金华本恩网络技术有限公司 html上传数据库中 什么是完全数据库备份与恢复 广西网络技术转让价格表格 我的世界服务器执行领地插件 达内科技互联网怎么样 广西网络安全工程师考点 网络安全学会会长讲话 服务器防火墙可以抵挡流量攻击吗 腾讯云服务器开始的密码是多少 软件开发中详细设计文档怎么写 百联世纪网络技术 数据库的链接建立过程 国智网络安全 网络技术应用基础知识题库 网络安全信息安全隐私安全 广东软件开发学费 中科院数据库怎么使用 增加数据库文件数量 百度SEO软件开发 学生计算机网络技术怎么学 浙江存储服务器机箱厂商 三丰云服务器有免费的吗 南瑞研究院软件开发待遇 SQL数据库文件名为空 需要多长时间部署云服务器 制作软件开发公司哪家好 软件开发原则和目标 电脑登录服务器慢是怎么回事
0