一、利用   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. ReportNg 测试报告的定制修改【转】

    前言 前段时间在Testerhome上面看到了测试报告生成系列之-------如何用 testNG 生成测试报告 简单的描述了一些测试报告的生成,接着有人在评论中回复说可以针对reportNg的测试报 ...

  2. apr 内存管理

    //============================================================================ // Name : mytest.cpp ...

  3. hbase 问题记录

    hbase regionserver挂掉~ org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.L ...

  4. float浮动问题:会造成父级元素高度坍塌;

    float浮动问题:会造成父级元素高度坍塌: 解决办法:清除浮动:clear:both; 给父元素高度:height(不是很可取) 给父元素:display:inline-black:(问题:marg ...

  5. [深入浅出WP8.1(Runtime)]生成图片和存储生成的图片文件

    7.2.3 使用RenderTargetBitmap类生成图片 RenderTargetBitmap类可以将可视化对象转换为位图,也就是说它可以将任意的UIElement以位图的形式呈现.那么我们在实 ...

  6. 【BZOJ】2563: 阿狸和桃子的游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=2563 题意:给一个n个加权点m条加权边的无向图,两个人轮流拿走一个点,最后使先手得分-后手得分尽量大 ...

  7. ThinkPHP3.2.3--Linux服务器首页文件index.php路径配置问题

    在windows服务器环境下,可以define ('SITE_URL','http://192.168.1.101/'); 但上传到linux服务器环境下不能正常解析,可使用相对路径:define ( ...

  8. [FMS]FMS流媒体服务器onStatus介绍说明

    在FlashCom中的Camera, Microphone, LocalConnection, NetConnection,NetStream和 SharedObject对象都提供了事件响应,onst ...

  9. 20145330孙文馨 《Java程序设计》第二周学习总结

    20145330孙文馨第二周学习总结 第二周相比于第一周对java语言有了深一点的了解,也意识到多敲代码才是学习计算机语言的最好方法. 教材内容总结 类型.变量与运算符 *基本类型 整数(short. ...

  10. golang 简易聊天

    client.go ------------------------------ package main import ( "net" "fmt" " ...