实现 RecyclerView 上拉加载及自动加载

之前在《一步步打造自己的通用上拉加载布局》(如果没有看过,建议先看下这一篇)写到如何实现一个通用的上拉加载布局,本文将基于此进行扩展,实现 RecyclerView 的上拉加载及自动加载。

之前在《一步步打造自己的通用上拉加载布局》(如果没有看过,建议先看看这一篇)写到如何实现一个通用的上拉加载布局,本文将基于此进行扩展,实现 RecyclerView 的上拉加载及自动加载。

在之前的《一步步打造自己的通用上拉加载布局》已经提到,下拉刷新是将获取到的数据替换掉原有的数据,而上拉加载则是将获取到的数据插入到原来数据的末尾与底部提示加载的 View(如FooterView)之间,它们的展现方式的不同,使得上拉出来用于提示加载的 View,对于列表类视图如 或 而言,适合作为它们的 FooterView 而不适合封装到我们的上拉布局中。因此,我们需要继承 并实现对于 的扩展。

准备工作

由于在中已经把上拉的逻辑都封装好,因此这里主要是对的及自动加载的封装。在这里,对于带的 Adapter,我是通过包装原有的 Adapter 来实现,这样在使用的时候就不需要把原来的 Adapter 改成我们的上拉加载中的 Adapter,以减少对代码的侵入。这个 Adapter 如下,代码可不必细看,它是上拉加载的副产品,不是主要逻辑,于这里贴出只是交底。

接下来,继承自这个 Adapter,实现对 FooterView 添加,代码如下:

然后,实现一个默认的 。它的布局文件很简单,就是一个 ,如下:

它需要实现 接口,Java 代码如下:

上拉加载的 FooterView 扩展

前面这些,都只是对 FooterView 显示的准备工作。最后,才是对实现支持 RecyclerView 的扩展。如果你不需要这个FooterView,那么直接使用也是可以的。当然,这里的扩展过程也很简单,继承,然后重写方法,限定子 View 只能是 RecyclerView,再定义一个设置 FooterView 的方法,如此即可,代码如下:

这就完成了上拉加载的扩展。

实现自动加载

接下来实现自动加载,这个也很简单,思路就是监听的滚动,如果到达底部,则主动触发上拉加载。这里只需要定义一个表示是否需要自动加载的成员变量,添加其 setter 方法,然后修改上面重写的方法,给 RecyclerView 加一个监听器即可,如下:

这样就扩展完成了。

使用示例

以上代码已提交至 Github 上的 hi-loadmore 项目(地址:https://github.com/msdx/hi-loadmore),并且已发布至 bintray。使用方式如下:

首先添加 Gradle 依赖:

然后在布局中使用 作为 的父布局。接下来在 Java 代码中添加配置:

然后设置触发了上拉加载后的处理:

最后看运行结果:

项目地址:https://github.com/msdx/hi-loadmore

本文来自企鹅号 - 浩码农媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

Java Web从前端到后台常用框架介绍

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解...

803
来自专栏祝威廉

Spark ListenerBus 和 MetricsSystem 体系分析

监控是一个大系统完成后最重要的一部分。Spark整个系统运行情况是由ListenerBus以及MetricsSystem 来完成的。这篇文章重点分析他们之间的工...

693
来自专栏web前端

HTML+CSS高级

第一章 ...

3396
来自专栏加米谷大数据

MapReduce API 基本概念

在正式分析新旧 API 之前,先要介绍几个基本概念。这些概念贯穿于所有 API 之中,因此,有必要单独讲解。 1、 序列化 序列化是指将结构化对象转为字节流以便...

2687
来自专栏腾讯IVWEB团队的专栏

react diff 原理

React diff 作为 Virtual DOM 的加速器,其算法上的改进优化是 React 整个界面渲染的基础,以及性能提高的保障,同时也是 React 源...

5250
来自专栏冰霜之地

大话大前端时代(一) —— Vue 与 iOS 的组件化

今年大前端的概念一而再再而三的被提及,那么大前端时代究竟是什么呢?大前端这个词最早是因为在阿里内部有很多前端开发人员既写前端又写 Java 的 Velocity...

953
来自专栏编程之旅

微信小程序——使用setData修改数组中的单个对象

微信小程序已经出来挺久的时间了,之前只是在文档上粗略的看了一下,最近稍得空闲,便利用微信小程序平台写一个练手的项目,顺便学习一下小程序开发,感觉大体跟前端开发基...

1112
来自专栏犀利豆的技术空间

Redis 数据库、键过期的实现

之前的文章讲解了 Redis 的数据结构,这回就可以看看作为内存数据库,Redis 是怎么存储数据的以及键是怎么过期的。

1022
来自专栏晓晨的专栏

晓晨高效IP提取工具 附源码

1173
来自专栏小程序·云开发专栏

一次在微信小程序里跑 h5 页面的尝试

标题看起来有点唬人,在微信小程序里跑 h5 页面,不会又是说使用 web-view 组件来搞吧?确实,使用 web-view 组件可以达到跑 h5 页面的要求,...

1121

扫码关注云+社区