以下内容为原创,欢迎转载,转载请注明
来自天天博客: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中有RecommendAdapterCommentAdapterRecommendAdapter中维护一个List<Recommend>数据集,CommentAdapter中维护了一个List<Comment>数据集,每个Adapter中可以设置HeaderFooter,把加载更多的组件作为一个Footer加在RecommendAdapterCommentAdapter中,然后响应点击事件,请求到数据之后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添加两个SeizeAdapterFilmActorSeizeAdapterFilmCommentSeizeAdapter)。

请求完数据之后直接使用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 详细的使用说明。

最后效果如下:

转载于:https://www.cnblogs.com/tiantianbyconan/p/6641794.html

[Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)相关推荐

  1. android listview替代,Android笔记——RecyclerView替代ListView

    ListView是常用列表控件,但设置Adapter时自定义代码较为复杂,因此Android3.0后,增加RecyclerView替代ListView RecyclerView没有提供OnItemCl ...

  2. Android 性能优化lt;九 RecyclerView替代Listview用法

    Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 (二)数据 ...

  3. Android取消RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘闪现灰白色水波纹动画

    Android取消RecyclerView.ListView.ScrollView.HorizontalScrollView滑动到边缘闪现灰白色水波纹动画 标准的Android RecyclerVie ...

  4. Android群英传笔记——第四章:ListView使用技巧

    Android群英传笔记--第四章:ListView使用技巧 近期也是比較迷茫.可是有一点点还是要坚持的,就是学习了.近期离职了,今天也是继续温习第四章ListView,也拖了事实上也挺久的了,lis ...

  5. Android中RecyclerView嵌套RecyclerView或嵌套ListView

    Android中RecyclerView嵌套RecyclerView或嵌套ListView

  6. 将替代ListView的RecyclerView 的使用(一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/by317966834/article/details/36205923 RecyclerView 是 ...

  7. android -------- Data Binding的使用 ( 四 )ListView

    今天来说说DataBinding在列表ListView中的使用 主要分为两种,1: 基本的实体类  2:Observable 定义字段 listView布局文件 <?xml version=&q ...

  8. Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载

    为什么80%的码农都做不了架构师?>>>    随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 M ...

  9. Android之RecyclerView 实现真正的Gallery效果

    简介: RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,但是直接把viewholder的实现封装起来,用 ...

最新文章

  1. 神奇的requestAnimationFrame
  2. 记一次与为知笔记的客服沟通
  3. 表单按钮实现 type=image
  4. CSS3详解:transform、transition
  5. 顶级程序员的心得ndash;Coders at Work
  6. 【HNOI 2016】序列
  7. 单片机是什么?单片机编程怎么入门?
  8. 网页滚动截屏怎么截长图
  9. 想开发一个在线的合同模板管理套件
  10. 达思SQL数据库修复软件升级至 5.0 版本(重要升级支持修复压缩格式的备份文件)
  11. 如何使用阿里云创建镜像和实例
  12. Chrome浏览器未连接到互联网的解决办法
  13. 天画项目-低代码平台-总体设计与实现
  14. 判断是不是平衡二叉树
  15. SnmpTrap测试与学习
  16. MindManager2022Mac版本支持导入XMind、FreeMind文件格式
  17. NetBIOS网络基本输入/输出系统协议分析
  18. Kalman滤波理解
  19. Keystore密钥库
  20. 无需注册支持快速安全视频的网站

热门文章

  1. 关于TableLayoutPanel里放入控件无法将Dock设为Fill的解决办法
  2. 数据科学和机器学习中使用的最多的20个R语言包
  3. IPv4_数据报文首部格式
  4. python的pandas库内的函数_python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)...
  5. android通过uri得到文件对象,安卓[android] 通过Uri获取File文件
  6. android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定
  7. hive金额怎么转换千位分隔符_金额字段加千位分隔符方法
  8. 有哪些专业学python_学习python有哪些好书和学习方法?
  9. 能力素质有所欠缺_孩子说话啰嗦没重点?家长学会“大脑整理术”,提高孩子表达能力...
  10. 怎么检查linux是否中病毒,linux中怎么检查是否有安装xinted这个服务