[Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)
以下内容为原创,欢迎转载,转载请注明
来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6641794.html
[Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)
在RecyclerView的开发过程中,可能会遇到一些窘境,比如,下图是今日头条的视频详情页面:

除去播放器外,其它组件应该是一个RecyclerView,但是这个RecyclerView中的item有两种类型:
一种是上部的推荐视频
一种是下面的评论
问题在于两类数据的最下面都有一个组件用于进行更多数据的加载,加载完毕后插入对应的position。
这里实现的方式应该怎么做呢?方法有很多,比如:
所有数据放在一个List中,保存加载更多的index,点击加载更多的index的时候触发请求返回后把推荐更多数据插入对应的index中并更新index,评论也是一样。。
推荐视频和评论保存在两个不同的List中,在Adapter中维护两份数据,重写
getItemCount()等方法。...
但是这些方法在以后业务的扩展和灵活性等方面都不值得提倡。因为就算是以后的业务只是想把推荐视频和评论两大块互换位置(虽然这个业务场景可能性不大)都是一个不小的工作量。
原因在于,默认情况下一个RecyclerView只会有一个Adapter来进行数据的适配,这样的话,如果数据分成了几个块(推荐视频和评论),单个Adapter的控制能力就很有限了。
设想一下,如果一个RecyclerView可以有很多个Adapter来进行数据的适配的话,那问题是不是迎刃而解了?
RecyclerView中有RecommendAdapter和CommentAdapter,RecommendAdapter中维护一个List<Recommend>数据集,CommentAdapter中维护了一个List<Comment>数据集,每个Adapter中可以设置Header和Footer,把加载更多的组件作为一个Footer加在RecommendAdapter和CommentAdapter中,然后响应点击事件,请求到数据之后recommendAdapter.addList(List<Recommend>)加入到推荐视频的数据集中,然后recommendAdapter.notifyDataSetChanged(),评论的数据加载也是如此。
于是根据这个思想,SeizeRecyclerView 编写完成,下面以电影详情为例,界面与上面的视频详情一样,整个RecyclreView被分为两个部分:演员区域(Actor)和评论区域(Comment)。
使用方式如下:
引入 SeizeRecyclerView 库:https://github.com/wangjiegulu/SeizeRecyclerView,后续会上传到Maven中心库
feedRv = (RecyclerView) findViewById(R.id.activity_main_rv);
// RecyclerView真正的Adapter
adapter = new FeedAdapter();
// 为真正的Adapter增加Header和Footer
adapter.setHeader(headerView = inflaterHeaderOrFooterAndBindClick(R.layout.header_film));
adapter.setFooter(footerView = inflaterHeaderOrFooterAndBindClick(R.layout.footer_film));
// 为真正的Adapter绑定各种seizeAdapter,这里的顺序决定了UI上显示的顺序
adapter.setSeizeAdapters(
filmActorSeizeAdapter = new FilmActorSeizeAdapter(),
filmCommentSeizeAdapter = new FilmCommentSeizeAdapter()
);
// 设置演员seize adapter的 header 和 footer
filmActorSeizeAdapter.setHeader(actorHeaderView = inflaterHeaderOrFooterAndBindClick(R.layout.header_film_actor));
filmActorSeizeAdapter.setFooter(actorFooterView = inflaterHeaderOrFooterAndBindClick(R.layout.footer_film_actor));
// 设置评论seize adapter的 header 和 footer
filmCommentSeizeAdapter.setHeader(commentHeaderView = inflaterHeaderOrFooterAndBindClick(R.layout.header_film_comment));
filmCommentSeizeAdapter.setFooter(commentFooterView = inflaterHeaderOrFooterAndBindClick(R.layout.footer_film_comment));
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
feedRv.setLayoutManager(layoutManager);
// 为RecyclerView设置真正的adapter
feedRv.setAdapter(adapter);
以上是RecylerView的初始化,并为Adapter添加两个SeizeAdapter(FilmActorSeizeAdapter和FilmCommentSeizeAdapter)。
请求完数据之后直接使用SeizeAdapter进行数据的填充和notifyDataSetChanged:
public void onRequestActors(List<ActorVM> list) {
filmActorSeizeAdapter.addList(list);
filmActorSeizeAdapter.notifyDataSetChanged();
}
public void onRequestComment(List<CommentVM> list) {
filmCommentSeizeAdapter.addList(list);
filmCommentSeizeAdapter.notifyDataSetChanged();
}
后续会增加 SeizeRecyclerView 详细的使用说明。
最后效果如下:

[Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)的更多相关文章
- [Android]使用RecyclerView替代ListView(三)
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4268097.html 这次来使用RecyclerView实现Pinn ...
- [Android]使用RecyclerView替代ListView(二)
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4242541.html 以前写过一篇“[Android]使用Adapte ...
- [Android]使用RecyclerView替代ListView(一)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4232560.html RecyclerView是一个比List ...
- Android笔记——RecyclerView替代ListView
ListView是常用列表控件,但设置Adapter时自定义代码较为复杂,因此Android3.0后,增加RecyclerView替代ListView RecyclerView没有提供OnItemCl ...
- Android最新组件RecyclerView,替代ListView
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40379159 万众瞩目的android最新5.0版本号不久前已经正式公布了,对于我 ...
- Android群英传笔记——第四章:ListView使用技巧
Android群英传笔记--第四章:ListView使用技巧 最近也是比较迷茫,但是有一点点还是要坚持的,就是学习了,最近离职了,今天也是继续温习第四章ListView,也拖了其实也挺久的了,list ...
- Android RecyclerView与ListView比较
RecyclerView 概述 RecyclerView 集成自 ViewGroup .RecyclerView是Android-support-V7版本中新增的一个Widgets,官方对于它的介绍是 ...
- 浅谈RecyclerView(完美替代ListView,GridView)
Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用. 个人体验来说,RecyclerView绝对是一款功能强大的控件. 首先总结下Recycl ...
- Android控件RecyclerView与ListView的异同
在我的一篇介绍Android新控件RecyclerView的博客(Android L新控件RecyclerView简介)中,一个读者留言说RecyclerView跟ListView之间好像没有什么不同 ...
随机推荐
- CSS3知识点整理(四)----布局样式及其他
包括CSS3多列布局样式.Flexbox伸缩布局.盒子模型等.重点介绍了Flexbox伸缩布局的各种属性用法. 一.多列布局 为了能在Web页面中方便实现类似报纸.杂志那种多列排版的布局,W3C特意给 ...
- matlab 自定义函数及调用
这一篇博客主要学习了: 第一,自定义函数优点有很多,比如可重复利用:容易纠错,以后直接装入大工程里(更重要的是,实参是复制给形参的,在自定义函数中运行时形参独立显示,这一点和C不一样). 第二,通过h ...
- angularJS+requireJS实现controller及directive的按需加载
最近因为项目的比较大,需要加载的js文件较多,为了提高首屏页面的加载速度,需要对js文件进行按需加载,然后网上参考了一些资料,自己也深入研究一番之后,实现了按需加载控制器js文件及指令js文件的效果: ...
- 解决 Windows instance 时间不同步问题 - 每天5分钟玩转 OpenStack(153)
这是 OpenStack 实施经验分享系列的第 3 篇. 问题描述 通过上一节部署出来的 Windows instance 有时候会发现操作系统时间总是慢 8 个小时,即使手工调整好时间和时区,下次 ...
- Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- kbhit()的三个测试
#include <stdio.h> #include<conio.h> #include<stdlib.h> int main() { ; system(&quo ...
- java dbutils查询数据库时无法给部分字段赋值原因
1,javaBean如下: public class User { /** * 用户唯一标识(ID) */ private String uid; /** ...
- SuperWebClient -一个基于CURL的.NET HTTP/HTTPS模拟神组件(1)
我们都知道,不管你是做爬虫也好,采集工具也罢,它们的HTTP/HTTPS模拟访问总是一个基础问题,我估计有很多人和我一样,虽然这样,那样的内置或是第三方类库用了很多,却总是会有一些不如意的问题存在,亦 ...
- [故障公告] 13:52-14:03,访问量突增,博客web服务器CPU 100%
13:52-14:03,由于访问量突增,博客web服务器全线CPU 100%,造成博客站点不正常访问,由此给您带来麻烦,请您谅解. 为了迎接访问量的增长给web服务器CPU带来的巨大压力,上周我们已经 ...
- 【转】Mysql分页语句Limit用法
http://qimo601.iteye.com/blog/1634748 FAQ: MYSQL limit,offset 区别 SELECT keyword FROM `keyword_rank` ...