Android View的Adapter

摘要:
1适配器通过为视图提供指定格式的数据来调整视图。UI设计的关键是了解每个视图组件的外观及其所需数据的格式。要显示的数据按顺序保存在列表中。975 RecyclerView$当在Recycler中的某个位置搜索数据视图时,将调用getViewForPosition,并在此函数中调用用户回调。

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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基于Apache Hudi构建数据湖的典型应用场景介绍logstash之input、codec学习下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js数组删除(splice和delete)

最近一直在写js的数组,然后就发现了很奇怪的问题,后来才发现了规律。 删除数据的一行,一般有两种方法,一个是splice,一个是delete; splice:删除了数组后,数组的长度会自动变化。用法:arr.splice(2,1)——2是数组的下标值,1 代表输出一行数据。 delete: 删除了数组后,数组的长度不会变化。 用法:delete arr[2...

USB转UART相关芯片

CP210X 系类官网地址 CP2102参考外围电路 CP2102 Pin Definitions Name Pin # Type Description  说明 VDD 6 Power In Power Out 3.0–3.6 V Power Supply Voltage Input. 3.3 V Voltage Regulator...

有关于java中List.add方法进行添加元素,发生覆盖的问题

问题原因:对于List.Add(),如果添加的是基本类型(值),则添加的为值;若添加为引用类型(对象),则添加的为引用的地址。 所以,循环添加时,添加的都是同一个对象引用,对象的成员值改变,List中所有对象的值就改变了。 解决方法:每次在改变值之前重新new一下对象,从而改变存储的引用地址,这样就不会发生元素覆盖。...

C#(99):加密与解密 Sytem.Security.CryptoGraphy

一、Hash加密,使用HashAlgorithm哈希算法类的派生类(MD5、SHA1等) 特点:只能加密,不可逆。可对目标信息生成一段特定长度唯一的Hash值。 HashAlgorithm派生类包括: KeyedHashAlgorithm: 显示所有加密哈希算法实现均必须从中派生的抽象类。  MD5: 表示 MD5 哈希算法的所有实现均从中继承的抽象类。...

数据库增量日志监听canal

概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 起源:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司...

delphi中的常用数学函数

delphi中的常用数学函数 定义:function Power(X,Y): (Same type as parameter); 说明:X可以是整型,也可以是实型;返回值实型例子:vari:integer;begini := Power(3,4); { 81}end. 求绝对值函数abs(x)定义:function Abs(X): (Same type...