Android View的Adapter
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的更多相关文章
- 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,在数据更新时会出 ...
- [Android] ListView关于adapter多种view设置
使用的关键点是在adapter覆盖两个方法 public int getItemViewType(int position) public int getViewTypeCount() 其它的可另go ...
- Android之listview && adapter
今天我们讲的也是非常重要的一个控件listview-最常用也是最难的 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...
- Android View自动生成插件
在ButterKnife这样强大的注入库出来之后,使用注入进行UI开发已经非常普遍.但考虑到效率.学习成本等问题,findViewById方式仍然是不错的选择. 但是当页面UI变得复杂后,我们从Lay ...
- Android View之用户界面...
PS:Android的控件真的是很多...现在还在忙到控件...也是神了.... 学习内容: 1.Spinner下拉菜单... 2.AutoComplete TextView自动完成文本框... 1. ...
- Android中的Adapter总结
一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...
- Android开发之Adapter
学习android时,对于我这种初学者来说,刚开始接触控件,发现有的控件需要adapter有些不需要,对此我感到不解.所以决定一探究竟. 其实android是一个完全遵从MVC模式的框架,activi ...
- Android中的Adapter 详解
http://blog.csdn.net/tianfeng701/article/details/7557819 (一) Adapter介绍 Android是完全遵循MVC模式设计的框架,Activi ...
- Android学习四、Android中的Adapter
一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...
随机推荐
- 【react学习二】create-react-app 接入antd 并按需加载组件
1.安装 cnpm i babel-plugin-import --save-dev 2.使用 在根目录下的package.json下的bable中添加相应代码 "babel": ...
- 《Head First 软件开发》阅读四
构建代码:自动化构建 代码的完成不只是能运行,还包括编译代码和打包成可配置的单元.学会一个构建工具来编写自己的说明处理源代码.新的团队成员需要立刻知道软件的关联组件和主要类去做测试,但开发人员不是心理 ...
- CodeForces-916A-jamie and Alarm Snooze(笨比题目)
链接: https://vjudge.net/problem/CodeForces-916A 题意: Jamie loves sleeping. One day, he decides that he ...
- 【NOIP2014模拟8.25】设备塔
题目 为了封印辉之环,古代塞姆利亚大陆的人民在异空间中建造了一座设备塔. 简单的说,这座设备塔是一个漂浮在异空间中的圆柱体,圆柱体两头的圆是计算核心,而侧面则是 传输信息所用的数据通道,划分成N *m ...
- Python 运算符Ⅳ
Python比较运算符 以下假设变量a为10,变量b为20: 以下实例演示了Python所有http://www.xuanhe.net/比较运算符的操作: 以上实例输出结果: Python赋值运算符 ...
- ps -aux显示信息COMMAND不全
ps -aux结果: ps -auxwww结果:
- js能否上传文件夹
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- Codeforces 962D Merge Equals ( 模拟 )
题意 : 给出一个序列,然后每次将重复出现的元素进行求和合并(若有多个,则优先取最小的进行合并),若某重复元素有很多,那么取最左边的那两个进行合并且合并后元素位于原来右边元素的位置,例如 3 2 6 ...
- VMware NAT模式下,公司代理下上网 续
这是在非公司环境下,VMware NAT 静态IP模式下上网 由于公司的限制,可能需要通过proxy上网. 下面是我在公司的配置(参考其他) 1. 修改 /etc/environment http_p ...
- 根据linux自带的JDK,配置JAVA_HOME目录
在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos6.5是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java ...