当前位置: 首页 > news >正文

Android---Jetpack之Paging

目录

Paging 组件的意思

Paging 支持的架构类型

Paging 的工作原理

PositionalDataSource

PagekeyedDataSource

ItemKeyedDataSource

BoundaryCallback

Paging 组件的意思

分页加载是在应用程序开发过程中十分常见的需求,Paging 就是 Google 为了方便 Android 开发者完成分页加载而设计的一个组件,它为几种常见的分页机制提供了统一的解决方案,让我们可以把更多的精力专注在业务代码上。

Paging 支持的架构类型

 \bullet 网络

对网络数据进行分页加载,是最常见的一种分页需求,也是我们学习的重点。不同的公司针对分页机制所设计的 API 接口通常也不太一样,但总体而言可以归纳为3种。Paging 组件提供了3种不同的方案,以应对不同的分页机制。分别是 PositionDataSourcePageKeyedDataSourceItemKeyedDataSource

\bullet 数据库

掌握了网络数据分页之后,数据库数据分页将会容易很多,无非就是数据源的替换。

 \bullet 网络+数据库

出于用户体验的考虑,我们通常会对网络数据进行缓存,以便用户在下次打开应用程序时,应用程序可以先展示缓存数据。我们通常会利用数据库对网络数据进行缓存,这意味着我们需要同时处理好网络和数据库这两个数据源。多数据源会让业务逻辑变得更为复杂,所以,我们通常采用单一数据源作为解决方案。即从网络获取的数据,直接缓存进数据库,列表只从数据库这个唯一的数据源获取数据,这里我们会学习 BoundaryCallback。 

Paging 的工作原理

Paging 的3个核心类

\bullet PagedListAdapter

 RecyclerView 需要搭配适配器使用,如果希望使用 Paging 组件,适配器需要继承自

PagingListAdapter

\bullet PagedList

 PagedList 负责通知 DataSource 何时获取数据,以及如何获取数据。例如,何时加载第一页/下一页,第一页加载的数量、提前多少条数据开始执行预加载等,从 DataSource 获取的数据将存储在 PagedList 中

\bullet DataSource

在 DataSource 中执行具体数据载入工作,数据可以来自网络,也可以来自本地数据库。根据分页机制的不同,Paging 为我们提供了3种 DataSource。数据的载入需要在工作线程中进行。

PositionalDataSource

适用于可通过任意位置加载数据,且目标数据源数量固定的情况。例如,请求时携带的参数为 start = 2&count = 5,则表示向服务端请求从第2条数据开始往后的5条数据。

DiffUtil

DiffUtil 用于计算两个数据列表之间的差异,它只会更新需要更新的数据,而不需要刷新整个数据源。

\bullet areItemsTheSame:检测两个对象是否代表同一个 item

\bullet 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 系统通常使用全息图将光耦合到波导中。本文展示了如何继续改进 本系列文章的第一部分 &#xff08;点击查看&#xff09;中建模的初步设计。&#xff08;联系我们获取文章附件&#xff09; 简介 AR 是一种允许屏幕上的虚拟世界与现实场景结合并交互的技术。 本文演示了如何…...

常用Git命令

整理了一些常用的git命令&#xff0c;备忘 查看仓库状态 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查看当前文件夹下文件 .开头为隐藏文件 &#xff08;文件夹下使用ctrlh查看&#xff09;ls -a&#xff08;查看文件及隐藏文件&#xff09;ls -alh&#xff08;查看文件及显示详情&#xff09;cd切换目录cd /&#xff08;切换到根目录&…...

第十天面试实战篇

目录 一、springboot的常用注解&#xff1f; 二、springmvc常用注解&#xff1f; 三、mysql的内连接和外连接有什么区别&#xff1f;比如有两张表&#xff1a;A和B内连接只返回两个表A和B的交集部分 四、redis分布式锁的缺点有哪些&#xff1f; 五、如何使用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关于轻量级锁与重量级锁之间的问答

问题&#xff1a;如果在轻量级锁状态下出现锁竞争&#xff0c;不一定会直接升级为重量级锁&#xff0c;而是会先尝试自旋获取锁&#xff0c;那么有a b两个线程竞争锁&#xff0c;a成功获取锁了&#xff0c;b就一定失败&#xff0c;那么轻量级锁就一定升级为重量级锁&#xff0c…...

有哪些通过PMP认证考试的心得值得分享?

回顾这100多天来艰辛的备考经历&#xff0c;感慨颇多 一&#xff0c;对于pmp的认知 百度百科&#xff1a;PMP&#xff08;Project Management Professional&#xff09;指项目管理专业人士&#xff08;人事&#xff09;资格认证。美国项目管理协会&#xff08;PMI&#xff09;举…...

【unity learn】【Ruby 2D】角色发射飞弹

前面制作了敌人的随机运动以及动画控制&#xff0c;接下来就是Ruby和Robot之间的对决了&#xff01; 世界观背景下&#xff0c;小镇上的机器人出了故障&#xff0c;致使全镇陷入了危机&#xff0c;而Ruby肩负着拯救小镇的职责&#xff0c;于是她踏上了修复机器人的旅途。 之前…...

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系列是一本非常著名的面试题…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...