超实用BRVAH开源框架使用之添加头部尾部问题
小白入坑,大佬轻喷~~
参考:
BRVAH官方使用指南(持续更新)
Github地址
前言:
BRVAH是一个强大的RecyclerViewAdapter开源库,代码简洁高效,优点如下:
- ·框架引入
- ·优化Adapter代码
和原始的adapter相对,减少70%的代码量。 - ·添加Item事件
Item的点击事件
Item的长按事件
Item子控件的点击事件
Item子控件的长按事件 - 添加列表加载动画
一行代码轻松切换5种默认动画。 - 添加头部、尾部
一行代码搞定,感觉又回到ListView时代。 - 自动加载
上拉加载无需监听滑动事件,可自定义加载布局,显示异常提示,自定义异常提示。同时支持下拉加载。 - 分组布局
随心定义分组头部。 - 多布局
简单配置、无需重写额外方法。 - 设置空布局
比Listview的setEmptyView还要好用。 - 添加拖拽、滑动删除
开启,监听即可,就是这么简单。 - 树形列表
比ExpandableListView还要强大,支持多级。 - 自定义ViewHolder
支持自定义ViewHolder,让开发者随心所欲。 - 扩展框架
组合第三方框架,轻松实现更多需求定制。
代码:
BRVAH添加头部尾部非常简单,只需要一行代码即可实现
- 头部
View view = ...;
adapter.addHeaderView(view);// 指定添加位置
adapter.addHeaderView(view, 1);// 替换头部
adapter.setHeaderView(view);
//替换指定位置头部
adapter.setHeaderView(view, 0);// 移除头部
adapter.removeHeaderView(view);
// 移除全部头部
adapter.removeAllHeaderView();
- 尾部
View view = ...;
adapter.addFooterView(view);// 指定添加位置
adapter.addFooterView(view, 1);// 替换脚部
adapter.setFooterView(view);
//替换指定位置脚部
adapter.setFooterView(view, 0);// 移除脚部
adapter.removeFooterView(view);
// 移除全部脚部
adapter.removeAllFooterView();
问题:
我此次使用的布局是横向瀑布流:
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(RecyclerView.HORIZONTAL);
rvlist.setLayoutManager(llm);
添加头部以后会出现头部占满一行的问题:
网上搜了许多办法,看到的也只有一条回答,这个方法我自己使用没有效果。
setHeaderViewAsFlow()
setFooterViewAsFlow()
以下是我自己的解决办法:
官方的文档上有一句话:
说明:此头部并不是item的头部,而是整个Adapter的头部
此脚部不是item的脚部,而是整个Adapter的头部
于是我找到了BaseQuickAdapter的源码查看:
public int addHeaderView(View header, int index) {return addHeaderView(header, index, LinearLayout.VERTICAL);}/*** @param header* @param index* @param orientation*/public int addHeaderView(View header,final int index, int orientation) {if (mHeaderLayout == null) {mHeaderLayout = new LinearLayout(header.getContext());if (orientation == LinearLayout.VERTICAL) {mHeaderLayout.setOrientation(LinearLayout.VERTICAL);mHeaderLayout.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT));} else {mHeaderLayout.setOrientation(LinearLayout.HORIZONTAL);mHeaderLayout.setLayoutParams(new LayoutParams(WRAP_CONTENT, MATCH_PARENT));}}
addHeaderView()方法存在好几个构造函数,我们默认调用的是只带一个参数的:
public int addHeaderView(View header) {return addHeaderView(header, -1);}
所以使用另外一个方法自定义布局方向:
public int addHeaderView(View header,final int index, int orientation) {}
例如:
addFooterView(v, -1, LinearLayout.HORIZONTAL);
结果:
最后是头部布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="30dp"android:layout_height="match_parent"android:orientation="vertical">
</LinearLayout>
按理来说,直接把布局设置为horizontal,跟上面的效果是一样的。
获取头部XML的代码:
View head = getLayoutInflater().inflate(R.layout.head_view, (ViewGroup) rvlist.getParent(), false);
头部和尾部的设置是一样的,这里就不重复了。
超实用BRVAH开源框架使用之添加头部尾部问题相关推荐
- recycleview 使用详解,添加头部尾部,混合item,侧滑菜单,跳转到指定位置,实现九宫格布局
添加头部尾部,混合item:https://blog.csdn.net/meixi_android/article/details/82256319 侧滑菜单:https://blog.csdn.ne ...
- 任务调度开源框架Quartz动态添加、修改和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触发器监听.你可以配置作业和触发器监听为全局监听或者是特定于 ...
- Android recycleview实现混合itemview,以及recycleview添加头部尾部
需要引入的module链接:https://pan.baidu.com/s/1kcVye2vT4M0mdCtzYpUVKw 添加module方法步骤:https://blog.csdn.net/mei ...
- Android开源框架BRVAH由来篇
简书首发:http://www.jianshu.com/p/2c02ca8763c2 为什么会有它? 在无数个加班的夜里,重复的编写着那一个又一个的列表界面,有的要分组,有的要添加广告头部.有的要不同 ...
- php框架选型,超实用的开源php框架选择指导
程序员们都懂得善用开源软件能够有效降低开发成本,而框架被认为是帮助开发者快速设计和开发动态网站的软件应用,因此在开发项目之前选择好一个合适的框架可以让程序员们的开发工作更加快捷.安全和有效,为今后奠定 ...
- iOS开源框架和项目总结
github上关于iOS的各种开源项目集合(转) .entry-header UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh ...
- Android 学习笔记之Volley开源框架解析(一)
PS:看完了LGD的六场比赛...让人心酸... 学习内容: 1.Http请求的过程... 2.Volley的简单介绍... 1.Http请求... 这里只是简单的说一下Http请求的过程.. ...
- Android开源框架Afinal第一篇——揭开圣女的面纱
Android开源框架Afinal第一篇--揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...
- 各种Android UI开源框架 开源库
各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...
最新文章
- Windows系统 配置Java的JDK环境变量
- day04-html
- 腾讯云使用Python发邮件
- tensorflow:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
- Redis命令:SETNX key value(SET if Not eXists)
- python分类预测降低准确率_python实现吴恩达机器学习练习3(多元分类器和神经网络)...
- oracle 采购 日历,Oracle日历程序
- Git和SVN的区别,Git的使用方法大全
- 区块链100篇之第三篇--数字签名
- 对 Sea.js 进行配置 seajs.config
- java安装path_JDK安装时设置PATH和CLASSPATH环境变量有何作用?
- 计算机模板是什么意思,Office
- 软件设计师考试大纲2018
- 开源项目: FlycoTabLayout SlidingTabLayout不显示字体的问题
- 手把手教你如何生成自己的二维码
- 树梅派-人脸识别菜鸡起步
- 【java之汉字转拼音】
- 恢复计算机什么意思,Win10重置此电脑是什么意思数据会全部丢失吗
- 【转】刘润:不要和没有逻辑的人讨论业务
- 基于Springboot+freemarker+Mysql实现的宿舍维修上报管理系统