首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用 Paging 3 实现分页加载

下图为您应用的各个层级中推荐直接接入 PagingAndroid 应用架构: ? Paging 组件及其在应用架构的集成 定义数据数据源的定义取决于您哪里加载数据。...即可,如果您使用了 Room, 2.3.0-alpha 开始,它将默认为您实现 Paging Source,请参见: Android 开发文档|使用 Room DAO 访问数据; 如果您从一个 多层级数据源...您可以实现 load() 函数来数据获取分页数据,并返回加载好的数据和加载前后页的参数信息。...如果要创建 PagingData 数据流,您需要创建一个 Pager 实例,并提供一个 PagingConfig 配置对象和一个可以告诉 Pager 如何获取您实现的 PagerSource 的实例的函数...有分隔符的列表列表中添加 分隔符 同样是分页数据转换,这里我们通过转换 PagingData列表中插入分隔对象。举例来说,我们可以为狗狗的名字插入字母分隔符。

1.7K31

Android Jetpack架构组件(九)之Paging

一、Paging简介 在Android应用开发中,我们经常需要以列表的方式来展示大量的数据,这些数据可能来自网路,也可以来自本地的数据库。为了避免一次性加载大量的数据,对数据进行分页就显得很有必要。...[在这里插入图片描述] 如上图所示,主要的步骤如下: 使用DataSource服务器获取或者本地数据获取数据。 将数据保存到PageList中。...三、Paging3 3.1 概述 Paging是JetPack框架提供的一个分页库,它可以帮助开发者本地存储或通过网络加载显示数据,不过由于历史原因,早期的Paging存在各种使用上的问题,因此Android...对象都对应一个数据源,以及该如何数据源中查找数据,PagingSource可以任何单个数据源比如网络或者数据库中查找数据。...如果要创建 PagingData 数据流,那么需要创建一个 Pager 实例,并提供一个 PagingConfig 配置对象和一个可以告诉 Pager 如何获取您实现的 PagerSource 的实例的函数

3.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

Jetpack 系列之Paging3,看这一篇就够了~

,这里的意思就是 我们传Int类型的值(如页码)得到返回的数据信息DemoReqData对象。...这句话翻译过来的意思就是:Pager对象PagingSource对象调用load()方法,为它提供LoadParams对象,并作为回报接收LoadResult对象。...Paging的加载状态 Paging3 为我们提供了获取Paging加载状态的方法,其中包含添加监听事件的方式以及在adapter中直接显示的方式,首先我们来看监听事件的方式 使用监听事件方式获取加载状态...除此之外,Paging3中还有一个比较重要的RemoteMediator,用来更好的加载网络数据库和本地数据库,我们后续有机会再为大家单独分享吧~ 2020年11月21日更新 paging3的设计理念是不建议对列表数据直接修改...大致意思就是如果数据发生变化 必须创建新的PagingData ,所以暂时我也不知道如何可以在不重新请求的情况下,在数据删除、新增后来刷新,如果你有好的方案,欢迎赐教!

1.8K20

kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构

实现列表功能,Paging3和Paging2一样,支持数据库缓存 一、依赖 主项目gradle中导入hilt插件 dependencies { classpath "com.android.tools.build...,接下来就要实现配置Pager,PagingSource我们已经实现了数据获取,现在需要的实现的是:网络数据使用RemoteMediator获取 1.网络数据获取:RemoteMediator 结合最初的架构图...,RemoteMediator是用于获取网络数据,并将数据存入数据库,我们就可以数据获取PagingSource,传递给后续的Pager @OptIn(ExperimentalPagingApi::...:Repository 定义一个Repository接口获取Flow>数据T应该为MovieItemModel,因为对外(ViewModel)而言,使用的都是MovieItemModel...网络对象,对内使用的才是MovieEntity数据对象 interface Repository { fun fetchList(): Flow>

3.2K30

Paging 3.0 简介 | MAD Skills

为什么使用 Paging 3.0? 向用户展示一列数据是最常见的 UI 模式之一。当您需要加载大量数据时,可以通过分块异步获取/显示数据来提升应用性能。...置入数据 在您应用的架构方案中,Paging 3.0 最适合作为数据获取数据并通过 ViewModel 在 UI 层传输数据来对其进行转换和呈现的一种方式。...每当 Paging 库想要加载新的数据来替代当前列表 (例如,下拉刷新或数据库更新、配置变更、进程终止等情况的发生而导致数据失效) 时,便会发生刷新操作。...当用户滚动列表时,PagingData 会持续 PagingSource 中获取数据以提供内容。...后续 按照如上步骤,我们已经将 Paging 3.0 集成到了您应用的数据层中!如何在 UI 中消费 PagingData 以及填充我们的仓库列表,敬请关注我们后续的文章。

81130

Jetpack 系列之Paging3,看这一篇就够了~

,这里的意思就是 我们传Int类型的值(如页码)得到返回的数据信息DemoReqData对象。...这句话翻译过来的意思就是:Pager对象PagingSource对象调用load()方法,为它提供LoadParams对象,并作为回报接收LoadResult对象。...Paging的加载状态 Paging3 为我们提供了获取Paging加载状态的方法,其中包含添加监听事件的方式以及在adapter中直接显示的方式,首先我们来看监听事件的方式 使用监听事件方式获取加载状态...除此之外,Paging3中还有一个比较重要的RemoteMediator,用来更好的加载网络数据库和本地数据库,我们后续有机会再为大家单独分享吧~ 2020年11月21日更新 paging3的设计理念是不建议对列表数据直接修改...大致意思就是如果数据发生变化 必须创建新的PagingData ,所以暂时我也不知道如何可以在不重新请求的情况下,在数据删除、新增后来刷新,如果你有好的方案,欢迎赐教!

3.2K10

获取数据并绑定到 UI | MAD Skills

在上一篇 Paging 3.0 简介 的文章中,我们讨论了 Paging 库,了解了如何将它融入到应用架构中,并将其整合进了应用的数据层。...我们使用了 PagingSource 来为我们的应用获取并使用数据,以及用 PagingConfig 来创建能够提供 Flow 给 UI 消费的 Pager 对象。...ListAdapter 切换到 PagingDataAdapter 接下来,我们开始 PagingData Flow 中收集数据,我们可以这样使用 submitData 挂起函数将它的发射绑定到 PagingDataAdapter...结束加载时滚动到列表的顶部 使用 withLoadStateHeaderAndFooter() 实现当获取数据时将加载栏添加到 UI 上 感谢您的阅读!...敬请关注下一篇文章,我们将探讨用 Paging 实现以数据库作为单一来源,并详细讨论 LoadStateFlow!

80820

Jetpack新成员,Paging3吐槽到真香

另外这里还引入了Retrofit的库,因为待会我们会网络上请求数据,并通过Paging 3进行分页展示。...接下来调用刚才在GitHubService中定义的searchRepos()接口,并把page和pageSize传入,服务器获取当前页所对应的数据。...注意LoadResult.Page()函数接收3个参数,第一个参数传入响应数据解析出来的Repo列表即可,第二和第三个参数分别对应着上一页和下一页的页数。...submitData()接收一个PagingData参数,这个参数我们需要调用ViewModel中返回的Flow对象的collect()函数才能获取到,collect()函数有点类似于Rxjava中的subscribe...因为Paging 3会在列表还远没有滑动到底部的时候就提前加载更多的数据(这是默认属性,可配置),从而产生一种好像永远滑不到头的感觉。

2.4K20

再探Kotlin 跨平台——迁移Paging分页库至KMM

迁移过程 初衷 据Cash App称,他们想在跨平台中使用分页逻辑,但是AndroidX Paging只支持Android平台。...最主要的是,paging-common中的API与AndroidX 下的API完全相同,仅仅是将包androidx.paging迁移到了app.cash.paging中,所以这部分的使用我们直接按照AndroidX...如果之前项目已经使用了AndroiX的Paging库,则可以在Android平台上无缝迁移。...项目架构 项目架构中可以看出在共享模块中,只有iosMain并没有AndroidMain,这是因为我们前面所讲到的针对Android平台是可以无缝迁移的。...定义Pager与PagerSource 定义查询数据的方法 定义HttpClient对象 这里的网络请求框架使用的是Ktor,代码如下所示: private val httpClient

1.1K20

Flutter快速开发——列表分页加载封装

在 App 中,列表数据加载是一个很常见的功能,几乎大多数 App 中都存在列表数据的展示,而对于大数据量的列表展示,为提高用户体验、减少服务器压力等,一般采用分页加载列表数据,首次只加载一页数据,当用户向下滑动列表到底部时再触发加载下一页数据...下面将通过代码介绍具体如何实现列表分页加载的封装。 整体介绍 在看具体实现之前,先带大家整体结构、最终实现的功能、使用到的三方库上做一个整体介绍。...); /// 列表数据 List data = []; } PagingState 有一个泛型 T列表 data 的 item 类型 ,即列表数据 item 的数据实体类型。...类型对象。...分页参数创建好后,调用抽象方法 loadData 传入创建好的参数,返回 PagingData 数据,即分页数据实体,源码如下: class PagingData { int?

6K31

JetPack--Paging2

Paging是一个用于分页加载的组件,对于一些列表数据,以前大家都使用过的一种方式是定义一个page,当达到加载更多条件时,page加一再去请求数据,为此我们要写很多重复的代码,Paging就对分页进行了一个封装...Paging由分为三个模块 1.DataSource:数据该模块中获取数据可以来源于网络、本地数据库等 2.PagedList:负责具体获取数据的逻辑,何时获取、加载下一页、预加载等 3.PagedListAdapter...:RecyclerView的adapter需要继承它,内部做了一系列处理 一、Paging上手 1.PositionalDataSource PositionalDataSource适合于任意位置获取数据的情况...,入参为开始点和数据量大小 首先我们要获取网络数据、使用LiveData、Paging等,需要添加依赖: implementation 'com.squareup.retrofit2:retrofit...} }); } } 其他的就不用改动了,效果和上面是一样的 3.ItemKeyedDataSource ItemKeyedDataSource使用于不固定的数据列表

1.3K30

深入探索 Paging 3.0: 分页加载来自网络和数据库的数据 | MAD Skills

对我们来说十分方便的是 Paging 库在 Room 库一些小小的帮助下已经可以应对这种场景。下面就让我们开始吧!点击这里 查看 Paging: 显示数据及其加载状态视频,了解更多详情。...本地的数据库要如何填充数据呢?来看看 RemoteMediator,当数据库中的数据加载完毕时,它负责网络加载更多数据。让我们看看它是如何工作的。...使用这些信息更新我们的 UI 就像 PagingAdapter 暴露的 loadStateFlow 中获取数据一样简单。...emptyList.isVisible = isListEmpty // 无论数据来自本地数据库还是远程数据,仅在刷新成功时显示列表。...refresh is LoadState.Error && repoAdapter.itemCount == 0 } } 我们开始 Flow 收集数据,并在 Pager 尚未加载且现存列表为空时

98420

Android Architecture Paging Library详解 | Google IO大会上的最新发布

>>>> Paging Library 库的架构 ? 图中可以看出,Paging是围绕PagedList为中心的,遵循数据驱动的思想。...比如加载第N+1条需要第N条的数据,这时候需要传第N条的数据过去。 PositionalDataSource:适用于数据总量固定,支持特定位置加载数据的场景。...>>>> PagedList PagedListDataSource中获取数据,通过PagedList.Config 可以配置一次加载的数量以及预加载的数量,它也为RecyclerView.Adapter...PagedStorage:用于存储加载到的数据,它包含一个ArrayList>对象mPages,按页存储数据。...userDao是model对象,可以数据库取到User返回DataSource.Factory对象,我们将DataSource.Factory传给LivePagedListBuilder,并配置PagedList

1.5K20

Jetpack---Paging你知道怎样上拉加载吗?

但是Jetpack远不止这些组件,今天的主角—Paging,Jetpack中的分页组件,官方是这么形容它的:‘’逐步您的数据源按需加载信息‘’ 1....,它将加载更多的数据 Config PageListDataSource中加载数据的配置 PagedStorage 用于存储加载到的数据 Config属性: pageSize:分页加载的数量 prefetchDistance...(item) } } 3.3 PagingWithNetWork 使用 上面我们通过Room进行了数据库加载数据,下面看一下通过网络请求记载列表数据: 和上面不同的就是Respository数据源的加载...那么我们的数据哪里获取呢,可以看到Listing的第一个参数pageList = livePageList,livePageList通过LivePagedListBuilder创建,LivePagedListBuilder...method=download&shareKey=460a039c8e8695464d321519258a104b)] 总结一下,Paging的基本原理为: 使用DataSource网络或者数据获取数据

1.8K40

Android-Jetpack笔记-Paging结合数据

Paging出现后,则只需要对数据进行变更,无需手动刷新UI,其内部会对数据源进行diff操作(基于Myers 差分算法),然后选择合适的方式刷新UI,同时他还处理了数据的分页加载。...Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def paging_version = "2.1.1" implementation "androidx.paging:paging-runtime...:$paging_version" 创建一个ViewModel //PagingViewModel.java private UserDao mUserDao; //dao对象用来数据库中获取数据...//用room返回的DataSource.Factory来构建数据列表 mLiveData = new LivePagedListBuilder(factory, config).build...LivePagedListBuilder如何构建数据源 分析前需要先理解几个概念,PagedList是具体的数据列表,由DataSource数据源提供数据,DataSource又由DataSource.Factory

84230
领券