Adapter适配器与具体应用(转)

原文链接

https://www.baidu.com/link?url=M12KLabpEsXtEkaWR4mkAU87_f2NDrKcmM-mLwbE644UqA6tT14F1zRg0o9a0aIVmYssFNl2hi4PaVEWGO8eP57fttiqbyUEjpfPCAiw9dC&wd=&eqid=f0852d500000876b00000006592e8dc6


Adapter适配器与具体应用

一.Adapter介绍:

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

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

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

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

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

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

3.Adapter构成:Adapter Layout对象:负责显示;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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值