一、利用   ItemViewType 区分普通项和头部尾部

二、将头部和尾部的项设置为占据整行,而不是像普通项一样只占据一个格子

给 RecyclerView 设置 GridLayoutManager 布局管理器

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);

在适配器中,利用 position 来判定每一项的类型:头部,普通项,底部

    @Override
public int getItemViewType(int position) {
int dataItemCount = getContentItemCount();
if (mHeaderCount != 0 && position < mHeaderCount) {//头部View
return ITEM_TYPE.ITEM_TYPE_HEADER.ordinal();
} else if (mBottomCount != 0 && position >= (mHeaderCount + dataItemCount)) {//底部View
return ITEM_TYPE.ITEM_TYPE_BOTTOM.ordinal();
} else {
return ITEM_TYPE.ITEM_TYPE_CONTENT.ordinal();
}
}

然后对应不同类型创建不同布局

    @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE.ITEM_TYPE_HEADER.ordinal()) {
return onCreateHeaderView(parent);
} else if (viewType == ITEM_TYPE.ITEM_TYPE_CONTENT.ordinal()) {
return onCreateContentView(parent, viewType);
} else if (viewType == ITEM_TYPE.ITEM_TYPE_BOTTOM.ordinal()) {
return onCreateBottomView(parent);
}
return null;
}
此时的RecyclerView的头部和尾部是一个跟普通子项一样占一列的布局
 
接下来是最重要的部分,当item是头部或底部时,我们 让item占据整行
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (adapter.isHeaderView(position) || adapter.isBottomView(position)) {
return gridLayoutManager.getSpanCount();
}else{
return 1;
}
}
});

adapter.isHeaderView(position) 和 adapter.isBottomView(position) 的判断跟 getItemViewType 差不多

此时就实现了头和底部占据一行,不再接在普通item后面了

给RecyclerView实现的GridView加上HeaderView和FooterView的更多相关文章

  1. Android GridView增加HeaderView和FooterView的实现

    Android GridView增加HeaderView和FooterView的实现 做的项目中遇到一个问题,需要实现一个页面 页面的上面是一个自定义的View和GridView,当向下滚动屏幕的时候 ...

  2. Android 5.X新特性之为RecyclerView添加HeaderView和FooterView

    上一节我们讲到了 Android 5.X新特性之RecyclerView基本解析及无限复用 相信大家也应该熟悉了RecyclerView的基本使用,这一节我们来学习下,为RecyclerView添加H ...

  3. ListView设置headerview和footerview

    [简介]headerview就是通常看到的那种listview手势下滑露出上面的部分,下拉到一定位置,松手会开始请求网络数据,然后刷新listview的列表.footerview一般就是listvie ...

  4. Android 编程下 ListView 的 HeaderView 和 FooterView 不可选择点击

    在 ListView 里,HeaderView 和 FooterView 也占一行,与其他的 item 一样,可以点击,有索引,HeaderView 的索引为0.如果要使这两项不可点击,可以使用下面的 ...

  5. 去掉UITableView HeaderView或FooterView随tableView 移动的黏性

    去掉UITableView HeaderView或FooterView随tableView 移动的黏性(sticky) 控制器中实现以下方法即可: - (void)scrollViewDidScrol ...

  6. 如果去掉UITableView上的section的headerView和footerView的悬浮效果

    项目需要cell的间距,又不需要悬浮效果,百度之后找到这个方法,记录一下,备忘. 用UIScrollView的代理方法实现 - (void)scrollViewDidScroll:(UIScrollV ...

  7. ListView中动态显示隐藏HeaderView和FooterView

    ListView中动态显示和隐藏Header&Footer 解决思路: 直接设置HeaderView和FooterView.setVisibility(View.GONE)无效, 布局仍然存在 ...

  8. RecyclerView中实现headerView,footerView功能

    之前用com.bartoszlipinski.recyclerviewheader.RecyclerViewHeader 不过局限性有点大. (com.bartoszlipinski.recycler ...

  9. [deviceone开发]-HeaderView和FooterView的示例

    一.简介 这个是利用do_ListView组件实现下拉和上拉刷新功能的例子,除了do_ListView,其它比如do_Webview,do_ScrollView都有这个个功能.对应的BBS里的帖子详细 ...

随机推荐

  1. Codeforces 682D Alyona and Strings(DP)

    题目大概说给两个字符串s和t,然后要求一个包含k个字符串的序列,而这个序列是两个字符串的公共子序列,问这个序列包含的字符串的总长最多是多少. 如果用DP解,考虑到问题的规模,自然这么表示状态: dp[ ...

  2. POJ3184 Ikki's Story I - Road Reconstruction(最大流)

    求一次最大流后,分别对所有满流的边的容量+1,然后看是否存在增广路. #include<cstdio> #include<cstring> #include<queue& ...

  3. java基础-控制流语句

    浏览以下内容前,请点击并阅读 声明 一般情况下,代码的执行按照从上到下的顺序,然而通过加入一些判断,循环和跳转语句,你可以有条件地执行特定的语句. 接下来分三部分介绍Java的控制流语句,他们是判断语 ...

  4. The StringFormat property

    As we saw in the previous chapters, the way to manipulate the output of a binding before is shown is ...

  5. nginx二级域名配置到文件夹

    user root; worker_processes ; events { worker_connections ; } http { include mime.types; default_typ ...

  6. [题解]扫雷Mine

    // 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrft.html 1088 ...

  7. hdu1232 并查集

    1. hdu1232 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 3.总结:简单并查集 #include<iostream> # ...

  8. POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files

    一.概述 HSSF和XSSF是apache开源项目POI中实现java面向Excel的两个接口.两者的区别在于,HSSF适用于Excel '97(-2007)文档,而XSSF适用于Excel 2007 ...

  9. 练习一:SQLite基本操作

    一.基础知识: 运用场景: 1>应用运行需要保存一系列有一定关系有一定结构的数据(文本也可以但是存储效率低) 2>文件类型:.db(一个数据库就是一个.db文件) 3>路径:/dat ...

  10. JQuery基本方法介绍和使用

    1.属性 $("p").addClass(css中定义的样式类型); 给某个元素添加样式 常用于表格鼠标移动效果 $(document).ready(function(){ //& ...