这篇文章需要BRVAH的基础,不是教程,只是提供方案和思路

不得不说BRVAH真的算是一个很不错Recyclerview的adapter

里面用到了一些封装的方法,很好,虽然有些还没用过,但是用过的都说好

网上教程很多,尤其是 官方指南 教程写的更是全面,大多数常用都可以在里面找到

下面直接写我实现的功能
注意是一个RecyclerView实现!!!
注意是一个RecyclerView实现!!!
注意是一个RecyclerView实现!!!


实现方式大概有几种,Recyclerview嵌套是最方便的,如果这样的话,大概我也就不写这篇文章了

现在实现方式打算采用一个RecyclerView实现,先观察上图,实际上有三种Type,(贡献排行算是一种)采用传统的Adapter我们需要自己定义Type,然后去根据不同Type bind不同的layout,下面写一下如何通过Brvah实现

里面用到了一个设置不同Type的方式 多布局代理, GitHub多种布局代理 详情移步这里

一:数据实体

public class LibraryBean {public static final int Type_Book = 1;//图书public static final int Type_Rank = 2;//排行public static final int Type_Header = 3;//分割线...................//省略数据}

我们需要自己定义Type,这样我们的Adapter才能type-----layout对应上

二:Adapter

public class LibraryAdapter extends BaseQuickAdapter<LibraryBean.ListBean, BaseViewHolder> {private int size;public LibraryAdapter(@Nullable List<LibraryBean.ListBean> data, int size) {super(data);this.size = size;//这里获取Type类型setMultiTypeDelegate(new MultiTypeDelegate<LibraryBean.ListBean>() {@Overrideprotected int getItemType(LibraryBean.ListBean listBean) {return listBean.getItemType();}});//这里添加Type类型getMultiTypeDelegate().registerItemType(LibraryBean.Type_Book, R.layout.item_book).registerItemType(LibraryBean.Type_Rank, R.layout.item_rank).registerItemType(LibraryBean.Type_Header, R.layout.header_view);}@Overrideprotected void convert(BaseViewHolder helper, LibraryBean.ListBean item) {//获取Type类型switch (helper.getItemViewType()) {case LibraryBean.Type_Book://填充书籍数据initBook(helper, item);break;case LibraryBean.Type_Rank://填充排行数据initRank(helper, item);break;case LibraryBean.Type_Header://填充分割线break;}}}

上面的注释写的相对来说比较详细了…

三:1/1和1/2显示处理

网上这方面的教程还是比较详细的…一搜一大把,毕竟这不是重点

     ..................省略数据final GridLayoutManager manager = new GridLayoutManager(this, 2);recyclerView.setLayoutManager(manager);LibraryAdapter libraryAdapter = new LibraryAdapter(list, size);libraryAdapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() {@Overridepublic int getSpanSize(GridLayoutManager gridLayoutManager, int position) {//是1/2 和1/1的区别  占一行 还是1/2return list.get(position).getItemType() == LibraryBean.Type_Book ? 1 : 2;}});recyclerView.setAdapter(libraryAdapter);//分割线recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {super.getItemOffsets(outRect, view, parent, state);GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams();int spanSize = layoutParams.getSpanSize();int spanIndex = layoutParams.getSpanIndex();if (spanSize == manager.getSpanCount()) {outRect.top = 20;}}});

BRVAH(BaseRecyclerViewAdapterHelper)多样式的使用相关推荐

  1. BRVAH官方使用指南(持续更新)--BaseRecyclerViewAdapterHelper

    项目地址:GithuGitHub BaseRecyclerViewAdapterHelper 官方网站:www.recyclerview.org BRVAH是一个强大的RecyclerAdapter框 ...

  2. BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合,Recyclerview如何在Databinding中快捷、方便地使用(一)

    BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其二) BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其三 ...

  3. BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合,Recyclerview如何在Databinding中快捷、方便地使用(三)

    BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其一) BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其二 ...

  4. BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合,Recyclerview如何在Databinding中快捷、方便地使用(二)

    BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其一) BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其三 ...

  5. 搭配BRVAH高效使用RecyclerView

    学习目标 熟悉使用 BRVAH 解决对应各种 adapter 需求 概述 BRVAH 是 Github 上的一个很棒的开源项目,主要作用是帮助我们更加高效的使用 Recyclerview 控件,处理项 ...

  6. BaseRecyclerViewAdapterHelper: 灵活强大的循环适配器

    BRVAH:灵活强大的循环适配器. 官方网站:http://www.recyclerview.org/ BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它 ...

  7. BaseRecyclerViewAdapterHelper用法抄袭

    前言 主要声明三点 第一: 关于本文的BaseRecyclerViewAdapterHelper用法,自然是转载的官方原文.或许有的人会很疑惑原文写的那么清除那么完善,为什么我还要写一篇几乎一模一样的 ...

  8. BRVAH源码分析(1)

    前言 此文章由BRVAH开发者angels分享给大家,目的是为了让BRVAH的使用者不仅会使用,还懂其原理.这样表面上比较慢,实际这一切都是值得的,懂了原理出了问题可以快速解决问题.「慢慢来,比较快. ...

  9. Android RecyclerView多样式列表实践指南

    前言 在日常的开发中我们经常会在一个列表数据中展示多种样式. 比如一个新闻列表,顶部是一个焦点Banner,然后是展示文章列表,文章中间可能插入某个图片广告,底部是一个加载更多/没有更多数据的加载状态 ...

最新文章

  1. 计算机视觉这篇就够了
  2. nginx反向代理https站点
  3. 【NLP】好资源!近 20 万本 txt 书籍的语料库,可用于 GPT 模型训练和语义分析...
  4. android 上下扫描动画,Android扫描雷达动画
  5. wxWidgets:wxToolBar 示例
  6. oracle重新恢复数据库,重新安装oracle根据原数据文件恢复数据库
  7. linux 学习笔记 显示压缩文件 gong.zip 的文件内容
  8. Python异常处理try...except...finally raise assert
  9. linux vim命令及使用,极大提升使用linux的舒适程度
  10. 11.8 Ext.util.Event.fire(): Attempting to fire “click“ event on destroyed 问题分析与解决
  11. access性别字段_12、ACCESS数据表的筛选(ACCESS图解操作系列)
  12. DCDC基础(2)--BUCK芯片的各个引脚是什么意思?带你深入了解BUCK电源的稳压原理
  13. 爬虫出现Forbidden by robots.txt
  14. Flutter实战-请求封装(五)之Isolate线程改造
  15. Java的字面量和符号引用
  16. 当 webpack 遇上 symlink
  17. PHP 开发社区微信服务号实战图解
  18. 对数损失和交叉熵损失
  19. 【8086汇编基础】05--常用函数库文件--emu8086.inc
  20. 《浪潮之巅》第三版读书总结--了解过去,才能把握未来(三)

热门文章

  1. ggdag 绘制DAG和因果图
  2. 能加密的写日记小工具(解压可用,无需安装)
  3. 泊松分布与美国枪击案
  4. 74HC595 8位移位寄存器介绍
  5. 七、HTMLTestRunner生成测试报告
  6. 19英寸标准服务器和网络机柜尺寸表
  7. 酒店点菜管理系统课程设计
  8. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法
  9. 2017淘宝年度 “骗钱”文案合集:让你不停买买买
  10. 融云「超级群」即将发布,邀你见证