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. Markdown小结

    Markdown标题 以# (#号加空格)开头的行会被视为标题,根据#的数量分为一到六级标题 # 一级标题 ## 二级标题 … ###### 六级标题 Markdown 水平线 一行由三个以上连续的减 ...

  2. 《Head First 软件开发》阅读六

    软件错误:专业排错 你编写的代码,你的责任.处理错误的方法和其他流程一样,准备好白板.让客户参与.满怀信心的估计.重构与预构. 首先是与客户加强沟通,不管是谁的代码,在自己的系统里就是自己的代码.使代 ...

  3. es6 Object.assign(target, ...sources)

    Object.assign() 方法用于将所有可枚举属性(对象属性)的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ...sources) ...

  4. APIview的请求生命周期源码分析

    目录 APIview的请求生命周期源码分析 请求模块 解析模块 全局配置解析器 局部配置解析器 响应模块 异常处理模块 重写异常处理函数 渲染模块 APIview的请求生命周期源码分析 Django项 ...

  5. 5. ClustrixDB SQL语法

    CustrixDB支持的DML语法 SELECT, DISTINCT, [LEFT | RIGHT | OUTER] JOIN, STRAIGHT_JOIN UNION, HAVING, GROUP ...

  6. Mysql5.7.26解压版(免安装版)简单快速配置步骤,5分钟搞定(win10-64位系统)

    第一次安装mysql环境的时候,总会遇到各种各样的坑,在尝试了安装版和解压版的数据库之后,感觉mysql的解压版更加的简单方便,省去好多时间做专业的事情 我这里选择的是5.7.26版本,解压版下载地址 ...

  7. html br标签 语法

    html br标签 语法 br标签什么意思? 作用:插入一个简单的换行符.广州大理石机械构件 说明:<br> 标签是空标签(意味着它没有结束标签,因此这是错误的:<br>< ...

  8. php大文件上传支持断点上传

    文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...

  9. sh_04_第1个函数改造

    sh_04_第1个函数改造 name = "小明" # say_hello() # Python 解释器知道下方定义了一个函数 def say_hello(): "&qu ...

  10. 苹果cms模板文件不存在:public/jump.html

    1,模板文件不存在很显然就是模板缺少文件导致,缺少什么文件一般都会提示.(如上图)点击首页的时,有的能进入播放页  有的提示(上图) 模版文件不存在:public/jump.html 通过查询苹果cm ...