打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx

上传人:b****5 文档编号:15762629 上传时间:2022-11-15 格式:DOCX 页数:27 大小:239.60KB
下载 相关 举报
打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx_第1页
第1页 / 共27页
打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx_第2页
第2页 / 共27页
打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx_第3页
第3页 / 共27页
打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx_第4页
第4页 / 共27页
打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx

《打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。

打造炫酷通用的ViewPager指示器Adapter模式适配所有Word文档下载推荐.docx

  2.2.2怎样才能适合所有的效果,难道我们把所有可能出现的效果都写一遍吗?

这的确不太可能,所以肯定采用Adapter适配器模式。

  2.2.3我们先动起来从简单的入手,先做到动态的添加不同的布局条目再说吧。

  

2.3自定义TrackIndicatorView动态添加布局:

  这里为了适配所有效果,所以决定采用适配器Adapter设计模式,上面也提到过。

至于什么是适配器模式大家需要看一下这个

1.模式介绍

1.1模式的定义:

  适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

1.2模式的使用场景:

  用电源接口做例子,笔记本电脑的电源一般都是接受5V的电压,但是我们生活中的电线电压一般都是220V的输出。

这个时候就出现了不匹配的状况,在软件开发中我们称之为接口不兼容,此时就需要适配器来进行一个接口转换。

在软件开发中有一句话正好体现了这点:

任何问题都可以加一个中间层来解决。

这个层我们可以理解为这里的Adapter层,通过这层来进行一个接口转换就达到了兼容的目的。

2.模式的简单实现

2.1简单实现的介绍:

  在上述电源接口这个示例中,5V电压就是Target接口,220v电压就是Adaptee类,而将电压从220V转换到5V就是Adapter。

2.2类适配器模式:

/**

*Target角色

*/

publicinterfaceFiveVolt{

publicintgetVolt5();

}

/**

*Adaptee角色,需要被转换的对象

publicclassVolt220{

publicintgetVolt220(){

return220;

}

//adapter角色

publicclassClassAdapterextendsVolt220implementsFiveVolt{

@Override

publicintgetVolt5(){

return5;

Target角色给出了需要的目标接口,而Adaptee类则是需要被转换的对象。

Adapter则是将Volt220转换成Target的接口。

对应的是Target的目标是要获取5V的输出电压,而Adaptee即正常输出电压是220V,此时我们就需要电源适配器类将220V的电压转换为5V电压,解决接口不兼容的问题。

publicclassTest{

publicstaticvoidmain(String[]args){

ClassAdapteradapter=newClassAdapter();

System.out.println("

输出电压:

"

+adapter.getVolt5());

2.3.Android源码中的模式实现

与类的适配器模式一样,对象的适配器模式把被适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用代理关系连接到Adaptee类。

    从图2可以看出,Adaptee类(Volt220)并没有getVolt5()方法,而客户端则期待这个方法。

为使客户端能够使用Adaptee类,需要提供一个包装类Adapter。

这个包装类包装了一个Adaptee的实例,从而此包装类能够把Adaptee的API与Target类的API衔接起来。

Adapter与Adaptee是委派关系,这决定了适配器模式是对象的。

//对象适配器模式

publicclassObjectAdapterimplementsFiveVolt{

Volt220mVolt220;

publicObjectAdapter(Volt220adaptee){

mVolt220=adaptee;

returnmVolt220.getVolt220();

2.4.类适配器和对象适配器的权衡

  *  类适配器使用对象继承的方式,是静态的定义方式;

而对象适配器使用对象组合的方式,是动态组合的方式。

  *  对于类适配器,由于适配器直接继承了Adaptee,使得适配器不能和Adaptee的子类一起工作,因为继承是静态的关系,当适配器继承了Adaptee后,就不可能再去处理Adaptee的子类了。

对于对象适配器,一个适配器可以把多种不同的源适配到同一个目标。

换言之,同一个适配器可以把源类和它的子类都适配到目标接口。

因为对象适配器采用的是对象组合的关系,只要对象类型正确,是不是子类都无所谓。

  * 对于类适配器,适配器可以重定义Adaptee的部分行为,相当于子类覆盖父类的部分实现方法。

对于对象适配器,要重定义Adaptee的行为比较困难,这种情况下,需要定义Adaptee的子类来实现重定义,然后让适配器组合子类。

虽然重定义Adaptee的行为比较困难,但是想要增加一些新的行为则方便的很,而且新增加的行为可同时适用于所有的源。

  *  对于类适配器,仅仅引入了一个对象,并不需要额外的引用来间接得到Adaptee。

对于对象适配器,需要额外的引用来间接得到Adaptee。

  建议尽量使用对象适配器的实现方式,多用合成/聚合、少用继承。

当然,具体问题具体分析,根据需要来选用实现方式,最适合的才是最好的。

3.AndroidListView中的Adapter模式

在开发过程中,ListView的Adapter是我们最为常见的类型之一。

一般的用法大致如下:

//适配器

publicclassMyAdapterextendsBaseAdapter{

privateLayoutInflatermInflater;

List<

String>

mDatas;

publicMyAdapter(Contextcontext,List<

datas){

this.mInflater=LayoutInflater.from(context);

mDatas=datas;

publicintgetCount(){

returnmDatas.size();

publicStringgetItem(intpos){

returnmDatas.get(pos);

publiclonggetItemId(intpos){

returnpos;

//解析、设置、缓存convertView以及相关内容

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

ViewHolderholder=null;

//ItemView的复用

if(convertView==null){

holder=newViewHolder();

convertView=mInflater.inflate(R.layout.my_listview_item,null);

//获取title

holder.title=(TextView)convertView.findViewById(R.id.title);

convertView.setTag(holder);

}else{

holder=(ViewHolder)convertView.getTag();

holder.title.setText(mDatas.get(position));

returnconvertView;

这看起来似乎还挺麻烦的,看到这里我们不禁要问,ListView为什么要使用Adapter模式呢?

我们知道,作为最重要的View,ListView需要能够显示各式各样的视图,每个人需要的显示效果各不相同,显示的数据类型、数量等也千变万化。

那么如何隔离这种变化尤为重要。

Android的做法是增加一个Adapter层来应对变化,将ListView需要的接口抽象到Adapter对象中,这样只要用户实现了Adapter的接口,ListView就可以按照用户设定的显示效果、数量、数据来显示特定的ItemView。

通过代理数据集来告知ListView数据的个数(getCount函数)以及每个数据的类型(getItem函数),最重要的是要解决ItemView的输出。

ItemView千变万化,但终究它都是View类型,Adapter统一将ItemView输出为View(getView函数),这样就很好的应对了ItemView的可变性。

那么ListView是如何通过Adapter模式(不止Adapter模式)来运作的呢?

我们一起来看一看。

ListView继承自AbsListView,Adapter定义在AbsListView中,我们看一看这个类。

publicabstractclassAbsListViewextendsAdapterView<

ListAdapter>

implementsTextWatcher,

ViewTreeObserver.OnGlobalLayoutListener,Filter.FilterListener,

ViewTreeObserver.OnTouchModeChangeListener,

RemoteViewsAdapter.RemoteAdapterConnectionCallback{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1