RecyclerView通常只有一个header和footer,但是像手机相册这种布局每个item都会有一个header该怎么办,其中一种办法就是RecyclerView嵌套RecyclerView,虽然能实现但是并不怎么友好,如何只创建一个RecyclerView就实现这种布局呢?
在github上找到了SectionedRecyclerView,不需要改动RecyclerView,定义adapter的时候只需要继承SectionedRecyclerViewAdapter即可,首先来看效果图


但是SectionedRecyclerViewAdapter使用的时候比平时的adapter多一些方法,下面简单介绍一下:

  1. SectionedRecyclerView这个库提供了两种adapter,一个是SectionedRecyclerViewAdapter,功能比较完成,有footer,另一个是SimpleSectionedAdapter,顾名思义就是简化版,只是有header,不需要footer
  2. 继承SectionedRecyclerViewAdapter时,通过hasFooterInSection设置是否显示footer布局
    下面贴出继承两种adapter的代码,方法的注释都写在上面了,只是比普通的adapter多了header和footer布局

继承SectionedRecyclerViewAdapter:

/*** @Description: 完整的adapter* 注意:通过hasFooterInSection()这个方法来设置是否需要显示footer* @author: ZhangYW* @time: 2019/1/24 9:39*/
public class MyAdapter extends SectionedRecyclerViewAdapter<MyAdapter.MyHeaderViewHolder, MyAdapter.MyItemViewHolder, MyAdapter.MyFooterViewHolder> {private Context mContext;private List<MyBean> mList;public MyAdapter(Context context, List<MyBean> list) {this.mContext = context;this.mList = list;}/*** header或者footer的个数* @return*/@Overrideprotected int getSectionCount() {return mList.size();}/*** 每个header或者footer中包含具体的内容个数* @return*/@Overrideprotected int getItemCountForSection(int section) {return mList.get(section).getList().size();}/*** 是否显示footer* @param section* @return*/@Overrideprotected boolean hasFooterInSection(int section) {return true;}/*** 渲染具体的HeaderViewHolder** @param parent   HeaderViewHolder的容器* @param viewType 一个标志,我们根据该标志可以实现渲染不同类型的ViewHolder* @return*/@Overrideprotected MyHeaderViewHolder onCreateSectionHeaderViewHolder(ViewGroup parent, int viewType) {View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_rv_header, parent, false);return new MyHeaderViewHolder(itemView);}/*** 渲染具体的FooterViewHolder** @param parent   FooterViewHolder的容器* @param viewType 一个标志,我们根据该标志可以实现渲染不同类型的ViewHolder* @return*/@Overrideprotected MyFooterViewHolder onCreateSectionFooterViewHolder(ViewGroup parent, int viewType) {View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_rv_footer, parent, false);return new MyFooterViewHolder(itemView);}/*** 渲染具体的ItemViewHolder** @param parent   ItemViewHolder的容器* @param viewType 一个标志,我们根据该标志可以实现渲染不同类型的ViewHolder* @return*/@Overrideprotected MyItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_rv_content, parent, false);return new MyItemViewHolder(itemView);}/*** 绑定HeaderViewHolder的数据。** @param holder* @param section 数据源list的下标*/@Overrideprotected void onBindSectionHeaderViewHolder(MyHeaderViewHolder holder, int section) {MyBean bean = mList.get(section);if (null == bean)return;holder.tv_header_title.setText(bean.getHeader());}/*** 绑定FooterViewHolder的数据。** @param holder* @param section 数据源list的下标*/@Overrideprotected void onBindSectionFooterViewHolder(MyFooterViewHolder holder, int section) {MyBean bean = mList.get(section);if (null == bean)return;holder.tv_footer_title.setText(bean.getFooter());}/*** 绑定ItemViewHolder的数据。** @param holder* @param section 数据源list的下标*/@Overrideprotected void onBindItemViewHolder(MyItemViewHolder holder, int section, int position) {MyBean bean = mList.get(section);if (null == bean)return;holder.tv_name.setText(bean.getList().get(position).getContent());GlideApp.with(mContext).load(R.mipmap.group).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).centerCrop().into(holder.iv_head);}/*** ItemViewHolder*/public class MyItemViewHolder extends RecyclerView.ViewHolder {private ImageView iv_head;private TextView tv_name;public MyItemViewHolder(View itemView) {super(itemView);iv_head = (ImageView)itemView.findViewById(R.id.item_iv);tv_name = (TextView)itemView.findViewById(R.id.item_tv_title);}}/*** HeaderViewHolder*/public class MyHeaderViewHolder extends RecyclerView.ViewHolder {private TextView tv_header_title;public MyHeaderViewHolder(View itemView) {super(itemView);tv_header_title = (TextView)itemView.findViewById(R.id.item_header_title);}}/*** FooterViewHolder*/public class MyFooterViewHolder extends RecyclerView.ViewHolder {private TextView tv_footer_title;public MyFooterViewHolder(View itemView) {super(itemView);tv_footer_title = (TextView)itemView.findViewById(R.id.item_footer_title);}}

继承SimpleSectionedAdapter:

/*** @Description: 简单用法 没有footer* @author: ZhangYW* @time: 2019/1/24 9:38*/
public class SimpleHeaderAdapter extends SimpleSectionedAdapter<SimpleHeaderAdapter.MyItemViewHolder> {private Context mContext;private List<MyBean> mList;public SimpleHeaderAdapter(Context context, List<MyBean> list) {this.mContext = context;this.mList = list;}@Overrideprotected String getSectionHeaderTitle(int section) {return mList.get(section).getHeader();}/*** header或者footer的个数* @return*/@Overrideprotected int getSectionCount() {return mList.size();}/*** 每个header或者footer中包含具体的内容个数* @return*/@Overrideprotected int getItemCountForSection(int section) {return mList.get(section).getList().size();}@Overrideprotected MyItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_rv_content, parent, false);return new SimpleHeaderAdapter.MyItemViewHolder(itemView);}@Overrideprotected void onBindItemViewHolder(MyItemViewHolder holder, int section, int position) {MyBean bean = mList.get(section);if (null == bean)return;holder.tv_name.setText(bean.getList().get(position).getContent());GlideApp.with(mContext).load(R.mipmap.group).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).centerCrop().into(holder.iv_head);}/*** ItemViewHolder*/public class MyItemViewHolder extends RecyclerView.ViewHolder {private ImageView iv_head;private TextView tv_name;public MyItemViewHolder(View itemView) {super(itemView);iv_head = (ImageView)itemView.findViewById(R.id.item_iv);tv_name = (TextView)itemView.findViewById(R.id.item_tv_title);}}
}


下载地址:TestSectionedRecyclerView
如果没有积分,请点这里github:TestSectionedRecyclerView

RecyclerView实现按时间分组手机相册效果相关推荐

  1. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(一)

    第二篇文章链接: android RecyclerView一步步打造分组效果.类似QQ分组.折叠菜单.分组效果(二) 效果图: 前言 之前看到这种效果如果用recyclerview来实现没有一点思路, ...

  2. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(二)

    第一篇链接: android RecyclerView一步步打造分组效果.类似QQ分组.折叠菜单.分组效果(一) 注!已更新代码! 上一篇写了分组效果的初步实现: 这一篇就继续增加分组折叠效果和基类的 ...

  3. android 相册相似图片,这样整理手机相册,容易引起极度舒适

    原标题:这样整理手机相册,容易引起极度舒适 手机拍照非常方便,大家平常都喜欢随手拍下各种照片去记录生活:此外,手机也常用来拍文件.笔记.PPT:还有屏幕截图.网络图片.表情包--日积月累整个相册凌乱不 ...

  4. 三星手机怎么恢复删除的图片_手机相册照片突然删除了怎么恢复?这个方法好用...

    生活中很多感情的沟通都是通过照片传达的,在微信斗图,在qq分享照片.和朋友聚会拍照留念等等,那么手机照片突然没了还能找回来吗? 情景一:手机相册照片突然删除了怎么恢复 大家平时都喜欢玩自拍.抖音等小视 ...

  5. recyclerview 分组_Android使用RecyclerView实现跨列分组

    效果图: 需求分析: 如上图所示,这是一个展示年级及学期的界面.年级分为三组高中.初中和小学.因学期太多若按一个一个控件的写既繁琐又不够优雅,所以我采用 RecyclerView配合分组来实现效果.注 ...

  6. jquery 实现智能炫酷的翻页相册效果

    jquery 实现智能炫酷的翻页相册效果 巧妙的运用 Html 的文档属性,大大减少jquery 的代码量,实现了智能炫酷的翻页相册.兼容性很好,实现了代码与标签的完全分离 ​1. [代码]jquer ...

  7. vue调用手机相机相册_今天才发现,点一下小米手机相册,能将照片一键制作成电影...

    随着国产手机的发展,手机像素越来越高,里面的功能也越来越丰富,手机拍照成了不少人的日常,如果你很爱拍照,手机里有一大堆照片,那么教你用手机自带的相册功能,一键将照片制作成电影,自带背景音乐,好看还很高 ...

  8. 相册权限_手机相册太乱?1分钟教你快速管理自己的照片,非常好用!

    喜欢拍照的朋友们是不是有这样一个烦恼,那就是手机里拍了很多照片,当你想找某一张照片时你得在手机里翻半天,费时费力,那么今天我就来给大家解决这个烦恼, 手机相册是手机中必不可少的,那当我们手机照片太多时 ...

  9. 手机900e模式如何救_手机护眼模式真的有用吗?长时间看手机如何保护视力?...

    [智友问答]手机护眼模式真的有用吗?长时间看手机如何保护视力 最近笔者刚刚更换了新手机,有一天在使用过程无意中碰到了某个开关,屏幕颜色变成了淡淡的黄色,等反应过来才明白碰到了护眼模式的开关,手机上的护 ...

最新文章

  1. DATEIF实例说明5
  2. activiti源码编译
  3. Hive group by实现-就是word 统计
  4. 算法导论之平摊分析(动态表)
  5. Spring Boot自动配置原理
  6. EventBus3.0 List事件遇到的坑
  7. 基本符号有_MapGIS 10中各种比例尺、符号尺寸计算说明(三)——随图缩放的符号计算...
  8. 【Java】7.1 与用户互动 7.2 系统相关
  9. PHP内核探索:新垃圾回收机制说明
  10. Iframe难点备忘
  11. mysql5.6 with as 用法_python面试专题with 关键字与上下文管理
  12. 深度学习中常说的向量和表示
  13. 恒大贾跃亭和解;快播处罚细节曝光;天津三星工厂关闭 | 极客头条
  14. Node.js 应该用在什么地方
  15. 软件开发技术文档编写规范
  16. w10连接远程计算机控制,Win10远程桌面连接如何开启,3种方式助你远程控制
  17. 洛谷P2386放苹果
  18. VCL语法教程——5.手持式1311编程器的支持
  19. 用c语言求20以内的勾股数,C语言求勾股数代码及解析
  20. 久处不厌,闲谈不烦。从不敷衍,绝不怠慢

热门文章

  1. 小米新手机鸿蒙系统,安卓终于被抛弃了!迎来鸿蒙系统新时代:结果小米新系统惨遭吐槽...
  2. 简单几步优化你的windows,加快开机速度(重装windows之后要做的几件事)
  3. 计算机语言送祝福,二十种编程语言齐送鼠年祝福
  4. cpu要和gpu搭配吗_显卡和CPU可以随便搭配吗?
  5. Linux使用ImageMagick下的convert命令转换图片格式
  6. C. Train and Queries
  7. 自带超多工具,好用又免费,这3款手机浏览器你用过了吗
  8. 基于java网上童装销售系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  9. iOS上使用自定义ttf字体
  10. 深入理解Servlet