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. 基于注解的IOC配置

    1 明确 注解配置和XML配置要实现的功能都是一样的,都是要降低程序间的耦合.只是配置的形式不一样. 关于实际的开发中到底是使用XML还是注解,每家公司有着不同的习惯.具体问题具体分析. 2 环境搭建 ...

  2. POJ-3020-Antena Placement(最小路径覆盖)

    链接: https://vjudge.net/problem/POJ-3020 题意: The Global Aerial Research Centre has been allotted the ...

  3. 织梦网站 TAG 标签调用

    一.TAG 标签在网站上的作用 1.什么是 TAG 标签? TAG 标签是一种由网站管理员自己定义的,比分类更准确.更具体,可以概括文 章主要内容的关键词. 2.TAG 标签作用 读者可以通过文章标签 ...

  4. JAVA语言动手动脑问题

    1. 早期经常这样定义变量  int value=100;前面的示例中这样定义变量  MyClass obj = new MyClass(); 这两种方式定义的变量是一样的吗?   答:不一样,后者开 ...

  5. (58)PHP开发

    LAMP 0.使用include和require命令来包含外部PHP文件. 使用include_once命令,但是include和include_once命令相比的不足就是这两个命令并不关心请求的文件 ...

  6. windows与ubuntu双系统的安装

    将ubuntu镜像烧录至U盘,从U盘启动电脑 选择自定义安装,不要选择它本身的双系统选项. 我的方案分区: 1. 挂载点/:主分区:安装系统和软件:大小为30G:分区格式为ext4:2. 挂载点/ho ...

  7. sqli-labs(23)

    基于get的过滤了的注入 0X1测试闭合 /?id=' http://127.0.0.1/sql1/Less-23/?id=1%27%27 0X02 然后就是组合拳的操作了 未报错 那么应该是’闭合 ...

  8. eclipse 简单配置

    1.安装STS4 help-->Eclipse Maketplace-->search 'STS'-->install 2.代码提示 Window-->preferences- ...

  9. linux上的常用的系统自带命令

    wikipedia 发现的分类,发现还有好多没用过.. Unix command-line interface programs and shell builtins   File system ca ...

  10. nginx中lua动态返回文件

    原来还可以这么操作,lua动态获取内容然后返回,下面是实例,可以做到先返回一个字符串,然后过5秒再返回另外一个字符串 ngx.say("hello") ngx.flush(true ...