Android---Jetpack之Paging
目录
Paging 组件的意思
Paging 支持的架构类型
Paging 的工作原理
PositionalDataSource
PagekeyedDataSource
ItemKeyedDataSource
BoundaryCallback
Paging 组件的意思
分页加载是在应用程序开发过程中十分常见的需求,Paging 就是 Google 为了方便 Android 开发者完成分页加载而设计的一个组件,它为几种常见的分页机制提供了统一的解决方案,让我们可以把更多的精力专注在业务代码上。
Paging 支持的架构类型
网络
对网络数据进行分页加载,是最常见的一种分页需求,也是我们学习的重点。不同的公司针对分页机制所设计的 API 接口通常也不太一样,但总体而言可以归纳为3种。Paging 组件提供了3种不同的方案,以应对不同的分页机制。分别是 PositionDataSource、PageKeyedDataSource、ItemKeyedDataSource。
数据库
掌握了网络数据分页之后,数据库数据分页将会容易很多,无非就是数据源的替换。
网络+数据库
出于用户体验的考虑,我们通常会对网络数据进行缓存,以便用户在下次打开应用程序时,应用程序可以先展示缓存数据。我们通常会利用数据库对网络数据进行缓存,这意味着我们需要同时处理好网络和数据库这两个数据源。多数据源会让业务逻辑变得更为复杂,所以,我们通常采用单一数据源作为解决方案。即从网络获取的数据,直接缓存进数据库,列表只从数据库这个唯一的数据源获取数据,这里我们会学习 BoundaryCallback。
Paging 的工作原理
Paging 的3个核心类
PagedListAdapter
RecyclerView 需要搭配适配器使用,如果希望使用 Paging 组件,适配器需要继承自
PagingListAdapter。
PagedList
PagedList 负责通知 DataSource 何时获取数据,以及如何获取数据。例如,何时加载第一页/下一页,第一页加载的数量、提前多少条数据开始执行预加载等,从 DataSource 获取的数据将存储在 PagedList 中。
DataSource
在 DataSource 中执行具体数据载入工作,数据可以来自网络,也可以来自本地数据库。根据分页机制的不同,Paging 为我们提供了3种 DataSource。数据的载入需要在工作线程中进行。
PositionalDataSource
适用于可通过任意位置加载数据,且目标数据源数量固定的情况。例如,请求时携带的参数为 start = 2&count = 5,则表示向服务端请求从第2条数据开始往后的5条数据。
DiffUtil
DiffUtil 用于计算两个数据列表之间的差异,它只会更新需要更新的数据,而不需要刷新整个数据源。
areItemsTheSame:检测两个对象是否代表同一个 item
areContentsTheSame:检测两个 Item 是否存在不一样的数据
PagekeyedDataSource
适用于数据源以页的方式进行请求的情况, 例如,若请求时携带的参数为 page=2&pageSize=5,则表示数据源以5条数据为一页,当前返回第二页的5条数据。
ItemKeyedDataSource
适用于当目标数据的下一页需要依赖上一页数据中最后一个对象中的某个字段作为 key 的情况,此类分页形式常见于评论功能的实现。例如,若上一页数据中最后一个对象的 key 为 9001,那么在请求下一页时,需要携带参数 since=9001&pageSize=5,则服务器会返回 key=9001 之后的5条数据。
BoundaryCallback
相关文章:

Android---Jetpack之Paging
目录 Paging 组件的意思 Paging 支持的架构类型 Paging 的工作原理 PositionalDataSource PagekeyedDataSource ItemKeyedDataSource BoundaryCallback Paging 组件的意思 分页加载是在应用程序开发过程中十分常见的需求,Paging 就是 Google 为了方便 Andr…...
gensim.models.word2vec() 参数详解
1. Word2vec简介 Word2vec是一个用来产生词向量的模型。是一个将单词转换成向量形式的工具。 通过转换,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。 2.Word2vec参数详解 class…...

光栅和矢量图像处理SDK:Graphics Mill 11.7Crack
Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松地向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG PSD 和其他 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像处理 使用任何维度…...

阿里云的客服 锻炼你心性的 一种方式 !!!
阿里云的产品,非常棒,开发的同学非常棒,专家们更棒,但,一切的开始就怕一个但字,但我还的说,但,阿里云的客服,OMG ,我已经忍耐了 1年了,是在忍不住…...

Linux常用的网络命令有哪些?快速入门!
在Linux系统中,有许多常用的网络命令可以用来进行网络配置和故障排除。这些命令可以帮助我们了解网络的状态和性能,并且可以快速诊断和解决网络问题。在本文中,我们将介绍一些常用的Linux网络命令,并提供一些案例来帮助您更好地理…...
PMP认证价值在哪?这个证书有什么用?
PMP证书是全球最权威的项目管理证书之一,获得该证书可以证明持证者具备高水平的项目管理知识和技能,拥有广泛的项目管理经验,并且符合全球项目管理行业的标准和规范。PMP证书的作用主要体现在以下几个方面: 1. 提升竞争力 在全球…...

一条更新语句的执行流程又是怎样的呢?
当一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表T上所有缓存结果都清空。这也就是我们一般不建议使用查询缓存的原因。 接下来,分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用ID这个索引。然…...
promise异步编程指南
promise 是什么 Promise 是异步编程的一种解决方案,可以替代传统的解决方案–回调函数和事件。ES6 统一了用法,并原生提供了 Promise 对象。作为对象,Promise 有以下两个特点: (1)对象的状态不受外界影响。 (2)一旦状态改变了就不…...
20230411----重返学习-网易云音乐首页案例-git远程仓库
day-047-forty-seven-20230411-网易云音乐首页案例-git远程仓库 网易云音乐首页案例 事件委托 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>2.事件委托</title><style>.parent-box…...

Ansys Zemax | 模拟 AR 系统中的全息光波导:第二部分
AR 系统通常使用全息图将光耦合到波导中。本文展示了如何继续改进 本系列文章的第一部分 (点击查看)中建模的初步设计。(联系我们获取文章附件) 简介 AR 是一种允许屏幕上的虚拟世界与现实场景结合并交互的技术。 本文演示了如何…...
常用Git命令
整理了一些常用的git命令,备忘 查看仓库状态 git status查看提交记录 git log创建本地分支 git branch [branch name]创建远程分支 git push origin [branch name]查看本地分支 git branch -v查看远程分支 git branch -a切换分支 git checkout [branch name]查看远程…...
新手程序员被职场PUA的时候正确的化解姿势
新手程序员遇到了职场p u a 应该怎么办 最近我和有个粉丝聊天 他刚毕业进入了一家公司 就遭遇到了职场p u a 导致自己的自信心被打击 非常的痛苦 他是属于进入一家小公司 而这家公司的代码真的是非常的烂 他截图发了一段他目前 正在处理的代码给我 真的是太烂了 很多代码就是属…...

LINUX_kali学习笔记
基础命令 命令说明示例pwd查看当前路径ls查看当前文件夹下文件 .开头为隐藏文件 (文件夹下使用ctrlh查看)ls -a(查看文件及隐藏文件)ls -alh(查看文件及显示详情)cd切换目录cd /(切换到根目录&…...

第十天面试实战篇
目录 一、springboot的常用注解? 二、springmvc常用注解? 三、mysql的内连接和外连接有什么区别?比如有两张表:A和B内连接只返回两个表A和B的交集部分 四、redis分布式锁的缺点有哪些? 五、如何使用reddssion解决r…...

YML是一种数据存储格式
读取yml配置信息 Value("${province}") private String province; Value("${user.sname}") private String name1; Value("${user1[1].name}") private String name; Value("${server.port}") private int port; server:port: 8099 #…...

笔记:Java关于轻量级锁与重量级锁之间的问答
问题:如果在轻量级锁状态下出现锁竞争,不一定会直接升级为重量级锁,而是会先尝试自旋获取锁,那么有a b两个线程竞争锁,a成功获取锁了,b就一定失败,那么轻量级锁就一定升级为重量级锁,…...

有哪些通过PMP认证考试的心得值得分享?
回顾这100多天来艰辛的备考经历,感慨颇多 一,对于pmp的认知 百度百科:PMP(Project Management Professional)指项目管理专业人士(人事)资格认证。美国项目管理协会(PMI)举…...

【unity learn】【Ruby 2D】角色发射飞弹
前面制作了敌人的随机运动以及动画控制,接下来就是Ruby和Robot之间的对决了! 世界观背景下,小镇上的机器人出了故障,致使全镇陷入了危机,而Ruby肩负着拯救小镇的职责,于是她踏上了修复机器人的旅途。 之前…...

C++模板基础(九)
完美转发与 lambda 表达式模板 void f(int& input) {std::cout << "void f(int& input)\t" << input << \n; }void f(int&& input) {std::cout << "void f(int&& input)\t" << input << \n;…...

【剑指 Offer】(1)
文章目录前言一、 数组中重复的数字:fire: 解决方法:dog: 代码二、二维数组中的查找:fire:思路:dog:代码三、替换空格:fire:思路:dog: 代码四、从尾到头打印链表:fire:思路:dog:代码:dog: 代码五、重建二叉树:fire:思路:dog: 代码总结前言 剑指offer系列是一本非常著名的面试题…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...