1 Adapter适配的对象是View

Adapter通过为View提供指定格式的数据来适配View,让View可以以事先约定好的方式将内容展示给用户。

所以,进行UI设计的关键是搞清楚各个View组件的外观以及它们需要的数据的格式,然后选用合适的Adapter交给它们即可。

2 观察者模式在Android Adapter中的应用

所谓的观察者就是说,让该对象死死的盯着另外一个对象,如果另外一个对象发生变化,该对象发生相应的变化。

在Android Adapter中,引入观察者模式的原因是,数据源会经常发生变化,这个时候UI也应该相应的发生变化。

Adapter里面已经有观察者模式的逻辑了,只需要自己实现一个Observer,然后注册给Adapter即可。

3 关于Adapter的数据list

第一,数据list是核心,是自己的程序和android sdk之间的接口;

第二,数据list的id和position是关键,它们都是从0开始的,从进入这个view开始的显示的第一条数据为0开始,这种对应关系就是list中的数据和view的对应关系;

第三,如果是自己实现Adapter话,那么就需要自己维护一个list来保存数据。

也有自己实现好了的Adapter,比如ArrayAdapter,这样的类自己有自己的list。

ListView,RecyclerView的View都是android sdk负责管理的,需要显示的数据按照先后顺序保存在list中。

4 需要重载的方法

4.1 onCreateViewHolder(ViewGroup parent, int viewType)

会在哪些场景下会被调用?因为是RecyclerView的,所以,这个函数在RecyclerView的生命周期中只会被调用一次吗?

RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline() 5,975 

RecyclerView$Recycler中为某个位置的数据找View的时候会调用getViewForPosition,进而调用createViewHolder,在这个函数中就会调用该用户回调。onCreateViewHolder本质上就是为某个位置创建View,这里的View被抽象为ViewHolder。而这个ViewHolder也是有模版的,只需要实现BaseViewHolder即可。

4.2 getItemCount

list中的数据的个数,只要是要显示的数据都要放在list中,如果加了一个header和一个footer,也是要计算整个的list中,对于android sdk,这个list相当于是一个虚拟的list。这个函数不需要关心是在什么场合下被调用的。

RecyclerView就是通过这个getItemCount知道整个数据集合的大小的,然后就能够知道要显示的list的大小了,它通过这个也就知道了其它回调函数中position的大小。

4.3 onBindViewHolder(BaseViewHolder holder, int position)

在回调onCreateViewHolder被调用,并且创建了ViewHolder,这个View只有外部形状而无实质内容,也就是说,没有实际的数据。RecyclerView在创建了ViewHolder之后,就需要为这些View绑定数据,就会调用onBindViewHolder回调,这里的position是view在view list中的位置,也是数据在对应的数据list中的位置。BaseViewHolder对象是在onCreateViewHolder中生成好的View对象。

4.4 getItemId

这个函数是给Listener使用的,一般情况下直接返回参数值即可。

4.5 int getItemViewType(int position)

这个函数也是在RecyclerView$Recycler.getViewForPosition()中被调用的。它是在ViewHolder被创建之前调用的,它返回的是viewType,作为onCreateViewHolder的第二个参数,这样就可以控制指定的item的view了,即对不同的栏创建不同的外观。

逐个生成每栏条目

第一步,使用getItemViewType指定viewType;

第二步,onCreateViewHolder根据指定的viewType生成对应的View;

第三步,调用onBindViewHolder给生成的View绑定数据;

10 参考资料

10.1 浅谈Adapter中的观察者模式

https://www.cnblogs.com/xqxacm/p/4878915.html

Android View的Adapter的更多相关文章

  1. Android之RecyclerView的原生Bug-Inconsistency detected. Invalid view holder adapter positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent}

    今天在运行自己编写的App时,突然发现App在运行时闪退,然后就查看了Android Studio的Log,发现了这个错误,上网查了一下,才知道是RecyclerView的原生Bug,在数据更新时会出 ...

  2. [Android] ListView关于adapter多种view设置

    使用的关键点是在adapter覆盖两个方法 public int getItemViewType(int position) public int getViewTypeCount() 其它的可另go ...

  3. Android之listview && adapter

    今天我们讲的也是非常重要的一个控件listview-最常用也是最难的 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

  4. Android View自动生成插件

    在ButterKnife这样强大的注入库出来之后,使用注入进行UI开发已经非常普遍.但考虑到效率.学习成本等问题,findViewById方式仍然是不错的选择. 但是当页面UI变得复杂后,我们从Lay ...

  5. Android View之用户界面...

    PS:Android的控件真的是很多...现在还在忙到控件...也是神了.... 学习内容: 1.Spinner下拉菜单... 2.AutoComplete TextView自动完成文本框... 1. ...

  6. Android中的Adapter总结

    一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...

  7. Android开发之Adapter

    学习android时,对于我这种初学者来说,刚开始接触控件,发现有的控件需要adapter有些不需要,对此我感到不解.所以决定一探究竟. 其实android是一个完全遵从MVC模式的框架,activi ...

  8. Android中的Adapter 详解

    http://blog.csdn.net/tianfeng701/article/details/7557819 (一) Adapter介绍 Android是完全遵循MVC模式设计的框架,Activi ...

  9. Android学习四、Android中的Adapter

    一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...

随机推荐

  1. tp5.1中的命名规范

    类里边用驼峰(类名首字母大写,属性和方法首字母小写) 类名:User,UserType 类中的属性和方法:getUserName(),tableName,instance 参数.数据表和字段 用小写字 ...

  2. 【NOIP2016提高A组模拟8.14】总结

    第一题是几何题,没去想直接弃疗.... 第二题觉得很像背包,但是单挑人的顺序不同,答案也会不同,我比较了每个人先后的优劣性,成功搞定了这道题.但是再输出时不小心搞错了,爆零. 第三题,我答案了整整一个 ...

  3. 微信点餐系统(七)-微信授权获取openid:

    章节小结: 1.学会了微信授权的步骤,学会了微信授权的文档 2.学会了使用natapp内网穿透工具 3.加深了虚拟机的网络配置以及基本使用 4.学会了抓包购票工具fiddler的使用 5.微信授权步骤 ...

  4. 浅谈BSGS(大步小步)及其扩展

    用途: 一般用来求\(a^x\equiv b\,\,(mod\,p)\)的最小正整数解,其中gcd(a,p)=1 设\(u=\lceil sqrt(p)\rceil\),则式子可以转化为\(a^{iu ...

  5. python之正则匹配match:search findall

    match:从开头位置匹配,只匹配一次,开头匹配不上,则不继续匹配 a,b,\w+ match(a,"abcdef") 匹配a >>> re.match(&quo ...

  6. HashMap原理及简单实现

    public class MyHashMap<K, V> { private class Entry<K, V> { int hash; K key; V value; Ent ...

  7. Json C#解析

    介绍 项目中数据格式如果是是Json格式,推荐大家使用LitJson和Newtonsoft.json进行解析 库的详细介绍和下载地址 推荐使用VS自带的Nuget来使用 Newtonsoft.Json ...

  8. 微信小程序 API 网络(ajax)

    网络 API 类似于 ajax 向服务器请求网络地址,唯一不同的是这个请求有很多的规则,且必须向服务器上请求,不能在本地请求 网络 发送请求: wx.request() 发起https网络请求 参数: ...

  9. P1076 寻宝

    P1076 寻宝 题解 这道题真是感人啊,废了蒟蒻一天的时间 关键 1. a[ k ][ ] 数组记录第k层有楼梯房间的编号 a[ k ][ 0 ]  第k层有几个有楼梯的房间 a[ k ][ i ] ...

  10. Mac OS 10安装CocoaPods流程

    一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPod ...