适配器模式 在Android中的简单理解

Android

在Android上提到适配器模式就会想到最常用的ListView和BaseAdapter

在这个功能的使用中,类似于适配器模式的对象适配器

例如在ListView中想用一个getView()方法,但是不同的数据,不同的需求,会有不同的getView()结果,所以getView()不能写死了,那么可能就想到了用适配器模式

所以ListView里面包含了一个ListAdapter的成员变量,实际上是ListView继承了AbsListView,ListAdapter变量是在AbsListView中声明的

然后BaseAdapter是实现了ListAdapter的,那么我们自定义的***Adapter继承了BaseAdapter,其实也就相当于间接实现了ListAdapter,并且***Adapter会具体去实现getView()方法

那么ListView就可以通过调用setAdapter(ListAdapter adapter)方法,将***Adapter传进去,从而实现了我们想要的结果

Java

适配器模式有两种:

  1. 类适配器
  2. 对象适配器

场景:

假如A类想用M方法,X类有M方法,但是M方法的结果不一定完全符合A类的需求

那么X类就是写死了,不好用,这样设计不好

那就把X类换成一个接口,弄出一些B,C,D,E.....类中间类出来,让他们都有一个方法来处理M方法的东西,再给A类用

类适配器:

设计一个接口I,让他也有M方法

然后设计一个B类,写好符合A类需求的specialM方法

然后让A类继承B类,并实现I接口的M方法

最后在A类的M方法中以super的方式调用B类的specialM方法

对象适配器:(更多是用对象适配器)

设计一个接口I,让他也有M方法

然后设计一个B类,写好符合A类需求的specialM方法

然后在A类中声明一个B类变量,并且A类实现I接口,那么A类也就有了M方法

最后在A类的M方法中,如果需要,就可以选择调用B类的specialM方法

或者设计一个B类,实现I接口的M方法

然后在A类中声明一个I类变量,再直接调用I接口的M方法

在调用A类的M方法之前,通过例如setAdapter(I Adapter)这样的方法,将B类设置成A类的成员变量

这样就保证了A类和I接口不变,适配不同情况的时候,写一个类似B类的中间类进行适配就可以了

总之,两端不变,通过不同的选择方式,选择不同的中间类,也就是适配器模式了

适配器模式参考链接

时间: 2024-10-07 07:32:55

适配器模式 在Android中的简单理解的相关文章

MVP架构在xamarin android中的简单使用

好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪自己太年轻了,还好是给指定行业的人使用. 重新学习思考之后,再看自己在项目中的某些实现的代码,的确不尽人意,甚至想骂自己. 项目经常改,改来该去,代码一直增加,一个fragment也没什么功能,接近1000行的代码,用region括起来,开看起来还挺整齐的,找的时候就凉了.究其原因,没有一种模式,所

Android中Context的理解与使用技巧

Context类,时刻的在与它打交道,例如:Service.BroadcastReceiver.Activity等都会利用到Context的相关方法. 但是不懂Context的原理.类结构关系.一个简单的问题是,一个应用程序App中存在多少个Context实例对象呢? Context,中文直译为"上下文",SDK中对其说明如下: Interface to global information about an application environment. This is an ab

《Android笔记3.6》 Android 中 Context 的理解及使用

课程背景:Context 是 Android 中一个非常重要的概念,用于访问全局信息,几乎所有的基础组件都继承自 Context,理解 Context 对于学习 Android 四大基本组件非常有帮助. 核心内容:1.理解 Context2.理解 Application Context 的作用 用于访问全局的资源 很多常用组件都是继承自Context,就是为了方便访问资源. private TextView tv; @Override protected void onCreate(Bundle

android中实现简单的聊天功能

这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~ 主要还是展示RecyclerView控件的使用吧~ 参考我之前写的文章: android中RecyclerView控件的使用 android中使用Nine-Patch图片 1.先添加一个关于聊天内容的Chat.java类: package com.example.chenrui.common; public class Chat { private String targetUser; private String content

【三】6.Android 中 Context 的理解及使用

[一]Context的作用:访问全局信息 Context是访问全局信息的接口,比如说应用程序的资源(图片资源.字符串资源.其他资源...), 所以一些常用组件就会继承Context,目的就是为了访问资源,比如说Activity以及将要学习的Service. 创建项目来看下如何通过Context进行资源的访问. public class MainActivity extends Activity{     private TextView tv;          @Override     pr

EventBus在Android中的简单使用

EventBus是一个方便与Android中各组件通信的开源框架,开源地址;https://github.com/greenrobot/EventBus.EventBus功能非常强大 ,今天在做一个功能时.遇到了点击事件的冲突问题及数据传递更新问题. 详细点就是在能够上下拉刷新的ListView的Header上有GridView.此时,GridView的OnitemClick事件与ListView的OnItemClick事件冲突. 并且我在实现 Griview的点击事件时,还要进行数据传递. 解

Android中Xfermode简单用法

首先在写这篇博客的时候,需要说明我是参考了那篇博文给我的灵感: 详解Paint的setXfermode(Xfermode xfermode) 其次呢,在写这篇博文的时候呢也避免不了抱怨啊.网上其他的关于Xfermode介绍的大部分都是google官方文档中属性的含义,都很雷同估计都是翻译过来的 我想说的是就不能有点原创吗? so,我决定写这篇文章: 一是抒发我心中的纠结: 二是抒发这么多天下文章一大抄就是没有自己出的文章: 三是抄就抄吧,也要加入自己的感悟把: 四是记录一下,以免以后忘记: 另外

【转】android中layout_weight的理解

android Layout_weight的理解 SDK中的解释: Indicates how much of the extra space in the LinearLayout will be allocated to the view associated with these LayoutParams. Specify 0 if the view should not be stretched. Otherwise the extra pixels will be pro-rated 

python中HTMLParser简单理解

找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间.名称和地点. 1 from html.parser import HTMLParser 2 from html.entities import name2codepoint 3 4 class MyHTMLParser(HTMLParser): 5 6 in_title = False 7 in_loca