介绍
采用的基本原理就是Header和Footer作为RecyclerView的一个Item,只是显示的方式特别一点,ListView实际也是这么做的所以添加了Header之后,数据的位置会错乱。
由于使用不同的LayoutManager时显示效果也不一样, 所以针对不同的LayoutManager需要做不同的操作。
分析一下,LinearLayoutManager比较简单,只需要将Header和Footer作为一项就可以了,GridLayoutManager和StaggeredGridLayoutManager在这个基础上还需要将Header和Footer所在的Item充满他所在的这一行。
变量和方法
1 | //Header和Footer,以及对应的Type |
根据是否有Header和Footer获取数据Size
1 | //根据是否有Header和Footer返回不同的Size |
根据是否有Header和Footer获取Type
1 | //获取item的type,基本逻辑是如果有header又是位于第一个的则返回HeaderType,如果pos超出了data的size,又是最后一个,则返回FooterType |
根据是否有Header和Footer创建Holder
1 | //根据返回的不同的type使用HeaderView和FooterView初始化Holder,至此已经可以对LinearLayoutManager添加Header和Footer |
LinearLayoutManager
- 由于LinearLayoutManager是连续排列的,所以只需要创建不同的holder就可以实现header+footer
GridLayoutManager
- 首先如何知道是否是GridLayoutManager,重写onAttachedToRecyclerView方法获取Manager,调用gridLayoutManager.setSpanSizeLookup()方法,设置他跨越的宽度。
1 |
|
StaggeredGridLayoutManager
- 主要使用StaggeredGridLayoutManager.LayoutParams的 layoutParams.setFullSpan(true);方法设置
1 |
|
QuickAdapter
- 最后贴一下整个QuickAdapter的源代码,涉及相关具体的类可以去这里查看
1 | package com.march.quickrvlibs; |