Adapter适配器与具体应用

Adapter适配器与具体应用

一.Adapter介绍:

1.Adapter是什么:Adapter适配器是沟通数据与视图的桥梁,用于对要进行显示的数据进行处理, 并通过与视图对象的绑定从而将数据显示到视图对象中。

2.Adapter应用场合:需要借助Adapter加载数据的AdapterLayout如:

①ListView以列表形式显示数据。

②GridView 以网格形式显示数据。

③Spinner 以下拉列表的形式显示数据。

④ViewPager 以分页形式显示数据。

3.Adapter构成:

AdapterLayout对象:负责显示;

Adapter对象:构建Item;

Context对象:资源访问对象;

View对象:呈现Item数据;

Data对象:代表数据;

4.Adapter工作原理的理解:

对于将要显示在AdapterLayout中的数据Data,Adapter会将数据存放在每个Item中,Item由存放对应类型的View控件来承载,最后Adapter将每个View控件显示在AdapterLayout中,从而实现了数据的显示。通俗来讲:如果将Adapter的工作看成是包饺子,那么Data数据就相当于是饺子馅,对应Adapter中的每个Item对象,而承载Item对象的View控件相当于饺子皮,Adapter相当于包饺子的人,负责数据的包装,最后将数据呈现在AdapterLayout中,AdapterLayout相当于是盛放饺子的盘子。

5.适配器的种类:

①:ArrayAdapter:简单的Adapter,主要用于对文本信息进行操作;其数据源为List<Object>集合。

②:SimpleAdapter:可以存放图片,文本信息;数据源为:List<? extends Map<String,?>>集合;

③:SimpleCursorAdapter();需要访问数据库

④:BaseAdapter::抽象类;有部分抽象方法;是最基础的适配器,其他适配器均在它的基础上进行扩展;⑤:ListAdapter:接口,看成一个标准;以上adapter都实现了该接口;

二.ListView中的应用:


该应用主要功能有:ListView中元素的排序,ListView中元素的分块显示,ListView右侧导航,ListView的单击事件。

功能实现:

1.左侧元素的显示实现过程:

①:Item对象中含有联系人姓名,姓名拼音首字母,以及头像三部分组成,可以声明一个Contact(联系人)类,该类包含以上属性,那么该适配器的数据源为一个List<Contact>集合,需要自己构建一个适配器来实现。

②自定义适配器可以继承BaseAdapter类也可以继承BaseAdapter类的子类,本案例中继承了ArrayAdapter类,相比直接继承BaseAdapter要简便;  


③排序:让手机联系人根据首字母升序排列,借助Collections.sort();方法重写compare方法,制定排序规则;


④分块显示:将具有相同首字母的联系人分在一块,只显示第一次出现该字母的TextView,其他TextView设置为隐藏。在已经排好序的基础上,首先要找到第一次出现该字母的位置,然后和每个Item位置进行比较,如果与第一次出现的位置相等,则设置该TextView显示,否则隐藏。


⑤:点击Item高亮显示:需要重写适配器的getView()方法,取到点击的位置和Item的位置比较,如果相等则改变背景颜色,否则为默认背景颜色;注意:如果在适配器优化中,使用了convertView对象,那么就要使用设置选择模式,否则可能导致点击一个Item有两个Item高亮显示,这是因为convertView对象实现了view的重用,减少了view对象的创建。


2.右侧导航栏的实现过程:

①该数据中只有英文字母,可以使用ArrayAdapter来实现,因为要改变字体颜色和设置样式,所有应自己写一个布局文件,来设置。

②得到数据源:可以使用循环往集合中添加所需要的元素。

③获得ListView对象并构建ArrayAdapter适配器:

④关联适配器。


⑤.设置OnItemClickListener监听,单击Item时,左边页面会将对应字母的联系人块置顶,同时该Item字体颜色变成红色,需要更新该适配器,在更新时会调用getView()方法;在getView()方法中写功能实现语句。


三.GridView中的应用:驾校系统中的如下效果:


项目实现过程:

①.相关属性:numColumns:设置有几列。horizontalSpacing:设置水平间距。verticalSpacing:设置垂直间距。


②.该视图中含有文本及图片信息,可以考虑使用SimpleAdapter适配器来实现。需要获得一个List<? Extends Map<String,?>>集合的数据源。


③.获得GridView对象,构建适配器并关联适配器。


注意:SompleAdapter适配器的构造方法中:public SimpleAdapter(Context context, List<? extends Map<String, ?>> data, @LayoutRes int resource, String[] from, @IdRes int[] to){}

参数:String[] from :为map集合中的key组成的数组;

参数:Int[] to::为存放map中key对应数据的View控件的id数组,要存放的数据要和控件id相对应。

四.Spinner中的应用:项目效果图及实现过程:


①.实现国家、城市、区县三级联动:

当Spinner1(国家)默认显示的为”国家”时,Spinner2(城市),Spinner3(区县)默认显示:“城市”和“区县”并且里面没有其他信息,而当Spinner1变动时,比较显示中国,此时Spinner2中的信息更新,添加了中国有关城市信息,而Spinner3中没有区县信息;当Spinner2中显示的不是“城市”时,Spinner3中的信息会更新以对应Spinner2中的城市信息。

②.首先获得数据源:定义三个数组,其中国家为一维数组,其他两个为二维数组,国家、城市、区县中的数据相对应。


③:获得Spinner对象,设置适配器,关联适配器,并给Spinner设置监听。


Spinner1监听:


Spinner2监听:


Spinner3监听:


五.ViewPager中的应用:项目效果图及实现过程:


①.使用PagerView适配器,实现该抽象类中的抽象方法:instantiateItem()方法:构建item对象,destroyItem()方法:销毁item对象;如果一共有四张图片需要加载,那么该开始会先创建两个Item,用户向右滑动一张图片后,会创建第三个Item,再向右滑动一张,第一 个Item销毁,第四个Item创建。总而言之要始终保持当前Item的左右(除了已经处在最左边或最右边的情况)都创建了一个Item,以便于用户在向左或向右滑动时即刻显示出来。



②获得ViewPager对象,关联适配器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Laravel 中,适配器模式(Adapter Pattern)可以帮助你将一个类的接口转换成另一个类的接口,以便两个类能够协同工作。适配器模式在 Laravel 中广泛应用于与外部服务和组件的集成。 在适配器模式中,三个关键角色: 1. 目标接口(Target Interface):定义了客户端代码期望的接口。 2. 适配器Adapter):实现了目标接口,并且通过包装一个已有的类来实现目标接口的方法。 3. 被适配者(Adaptee):已有的类,其接口与目标接口不兼容。 在 Laravel 中,适配器模式常见的应用场景是与外部服务进行集成。例如,你可能需要将一个第三方支付服务的接口适配成 Laravel 中的统一支付接口,以便在不同的支付服务之间切换时不需要修改大量代码。 以下是一个简单的示例: ```php // 目标接口 interface PaymentGateway { public function pay($amount); } // 适配器 class ThirdPartyPaymentAdapter implements PaymentGateway { protected $thirdPartyPaymentService; public function __construct(ThirdPartyPaymentService $thirdPartyPaymentService) { $this->thirdPartyPaymentService = $thirdPartyPaymentService; } public function pay($amount) { $this->thirdPartyPaymentService->processPayment($amount); } } // 被适配者 class ThirdPartyPaymentService { public function processPayment($amount) { // 调用第三方支付服务的接口 } } // 客户端代码 $thirdPartyPaymentService = new ThirdPartyPaymentService(); $paymentGateway = new ThirdPartyPaymentAdapter($thirdPartyPaymentService); $paymentGateway->pay(100); ``` 在上述示例中,我们定义了一个目标接口 `PaymentGateway`,适配器 `ThirdPartyPaymentAdapter` 实现了该接口,并通过包装 `ThirdPartyPaymentService` 类来实现目标接口的方法。客户端代码通过适配器来调用支付接口。 通过适配器模式,我们可以将第三方支付服务的接口适配成 Laravel 中的统一支付接口,以便在应用中使用统一的接口进行支付操作。 请注意,这只是一个简单示例,实际应用中可能涉及更复杂的逻辑和配置。适配器模式的具体实现方式会根据场景和需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值