首页
学习
活动
专区
圈层
工具
发布

RecyclerView 分页功能

当我们在用户滚动到底部时加载下一个“页面”,更多的内容被加载并可用。 何时使用分页? 如果你有大量的内容需要太长时间才能加载。这可以是本地数据库或API调用。那么使用分页是有意义的。...如果您从数据库中提取数据,请分批请求数据(每个请求20个)。同样的情况也适用于API调用。...1、ProgressDialog在取得初始数据的同时在空白屏幕上显示加载进度 2、隐藏ProgressDialog和显示数据 3、检测用户滚动到列表的末尾 4、ProgressDialog在提取下一页数据时在页脚显示...0; //表示是否显示了页脚ProgressBar(即下一页正在加载) private boolean isLoading = false; // 如果当前页面是最后一页(页面加载后分页将停止...一旦初始数据加载,它的时间倾听滚动更改并触发下一页 private void loadNextPage() { List movies = Movie.createMovies(adapter.getItemCount

3.4K30

paging组件的用法和意义

ItemKeyedDataSource:    适用于当目标数据的下一页需要依赖于上一页数据中最后一个对象中的某个字段作为key的情况,例如我请求key=9001后的5条数据作为下一页的数据。   ...四.分页机制的实现   我们以从豆瓣网上获取热度最高的250部电影为例进行讲解,这里我们使用Retrofit+OkHttp进行网络数据的获取,如果对这两个网络请求工具不熟悉的话,可以看这篇博客:https....getApi() .getMovies(loadRangeParams.startPosition,pageSize) //在你滑动手机屏幕到底部请求下一页的数据时...,但尚未加载出来的数据预留位置 .setPageSize(5) .setPrefetchDistance(3) //设置当距离底部还有多少数据时加载下一页数据...2.当数据库中没有数据的时候,会通知BoundaryCallback中的onZeroItemsLoaded()方法;若数据库中有数据,则当用户滑到RecyclerView的底部时,且数据库中的数据已经加载完毕了

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

    Jetpack新成员,Paging3从吐槽到真香

    是的,不要想着去监听列表滑动事件,滑动到底部的时候发起一个网络请求加载下一页数据。Paging 3完全不是这么用的,如果你还保留着这种过去的实现思路,在学习Paging 3的时候会很受阻。...注意LoadResult.Page()函数接收3个参数,第一个参数传入从响应数据解析出来的Repo列表即可,第二和第三个参数分别对应着上一页和下一页的页数。...针对于上一页和下一页,我们还额外做了个判断,如果当前页已经是第一页或最后一页,那么它的上一页或下一页就为null。...然而凡事总有意外,比如说当前的网速不太好,虽然Paging 3会提前加载下一页的数据,但是当滑动到列表底部的时候,服务器响应的数据可能还没有返回,这个时候就应该在底部显示一个正在加载的状态。...这样我们就把底部显示加载状态的功能完成了,现在来测试一下吧,效果如下图所示。 ? 可以看到,首先我在设备上开启了飞行模式,这样当滑动到列表底部时就会显示重试按钮。

    3K20

    RecyclerView预加载!

    列表的内容是由服务器返回的分页数据,每次浏览到当前页的尾部,都会拉取下一页的数据。这中断用户的浏览,不免产生等待。产品希望让这个过程无感知。...一种实现方案是预加载,即在一页数据还未看完时就请求下一页数据,让用户感觉列表的内容是无穷的。...监听列表滚动状态 第一个想到的方案是监听列表滚动状态,当列表快滚动到底部时执行预加载,RecyclerView.OnScrollListener提供了两个回调: public class RecyclerView...然后就可以像这样实现预加载: recyclerView.addOnPreloadListener(3) {// 当距离列表底部还有 3 个表项时执行预加载 // 预加载业务逻辑 } 一运行 Demo...不要担心用户在列表底部多次上拉导致回调多次预加载,因为这种情况下onBindViewHolder()不会执行多次。当RecyclerView更换LayoutManager时,也不需要修改代码。

    3.2K00

    Android Jetpack系列 之分页库Paging3(一)

    API接口准备 API接口我们使用 「鸿洋」大佬 「玩Android」中的查询每日一问接口 :https://wanandroid.com/wenda/list/1/json 这里我们已经写好了RetrofitService...这句话翻译过来的意思就是:Pager对象从PagingSource对象调用load()方法,为它提供LoadParams对象,并作为回报接收LoadResult对象。...prefetchDistance:预取距离,简单解释就是 当距离底部还有多远的时候自动加载下一页,即自动调用load方法,默认值和pageSize相等 enablePlaceholders:是否显示占位符...,当网络不好的时候,可以考到页面的框架,从而提升用户体验 还有一些其他参数这里就不一一介绍了,从构造方法的源码中可以看出pageSize这个参数是必填的,其他的是可选项,所以我们这里传了1 定义RecycleViewAdapter...当我们往下滑动时,当底部还剩1个(pageSize)数据的时候会自动加载下一页。

    4.6K30

    使用 Paging 3 实现分页加载

    Paging 3 亮点 Paging 3 的 API 对分页加载时可能需要实现的常见功能提供了支持: 跟踪获取前一页或后一页所需要的参数; 当用户滚动到现有数据的末尾时,自动请求正确的下一页; 确保不会同时触发多个请求...这样一来,如果您在数据流中实现了任何转换操作,当 Activity 被重建并使得您从 flow 中获取数据时,不会再次触发这些操作。...基于 PagingState 和 LoadType,我们可以构造下一页的数据请求。...由于 Paging 库并不知道您的 API 是怎样的,所以定义如何构造和获取前一页和下一页的远程数据的工作便需要由您自己来完成。...举例来说,您可以将您从网络接收到的每个项目与远程关键字关联起来并存入数据库。

    2.3K31

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

    这句话翻译过来的意思就是:Pager对象从PagingSource对象调用load()方法,为它提供LoadParams对象,并作为回报接收LoadResult对象。...prefetchDistance:预取距离,简单解释就是 当距离底部还有多远的时候自动加载下一页,即自动调用load方法,默认值和pageSize相等 enablePlaceholders:是否显示占位符...,当网络不好的时候,可以考到页面的框架,从而提升用户体验 还有一些其他参数这里就不一一介绍了,从构造方法的源码中可以看出pageSize这个参数是必填的,其他的是可选项,所以我们这里传了1 定义RecycleViewAdapter...当我们往下滑动时,当底部还剩1个(pageSize)数据的时候会自动加载下一页。...Prepend 区别如下表格所示: refresh 在初始化刷新的使用 append 在加载更多的时候使用 prepend 在当前列表头部添加数据的时候使用 也就是说如果监测的是it.refresh,当加载第二页第三页的时候

    4K10

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

    这句话翻译过来的意思就是:Pager对象从PagingSource对象调用load()方法,为它提供LoadParams对象,并作为回报接收LoadResult对象。...prefetchDistance:预取距离,简单解释就是 当距离底部还有多远的时候自动加载下一页,即自动调用load方法,默认值和pageSize相等 enablePlaceholders:是否显示占位符...,当网络不好的时候,可以考到页面的框架,从而提升用户体验 还有一些其他参数这里就不一一介绍了,从构造方法的源码中可以看出pageSize这个参数是必填的,其他的是可选项,所以我们这里传了1 定义RecycleViewAdapter...,通过PagingAdapter的submitData方法为adapter提供数据,运行结果如下所示(忽略丑陋的UI.jpg) 当我们往下滑动时,当底部还剩1个(pageSize)数据的时候会自动加载下一页...Prepend 区别如下表格所示: refresh 在初始化刷新的使用 append 在加载更多的时候使用 prepend 在当前列表头部添加数据的时候使用 也就是说如果监测的是it.refresh,当加载第二页第三页的时候

    2.5K20

    仿抖音上下滑动分页视频

    3.在recyclerView对应的adapter中,在onCreateViewHolder初始化视频操作,同时当onViewRecycled时,销毁视频资源。...的缓存机制O(∩∩)O,这里不会去赘述缓存机制,要做的是要知道在什么时候去做释放视频的操作,还要分清是释放上一页还是下一页。...从后台切换到前台,当视频暂停时或者缓冲暂停时,调用该方法重新开启视频播放。...那么这些都是要请求接口的,还有滑动分页的功能,当滑动到最后某一页时候拉取下一个视频集合数据等业务逻辑。视频播放功能这块,因为功能比较复杂,因此封装一下比较好。尽量做到视频功能解藕!...,建议一次拉下10条数据(这个也可以和服务端协定自定义数量),而不要滑动一页加载下一页的数据。

    6.9K20

    Jetpack组件之Paging

    ItemKeyedDataSource 适用于当目标数据的下一页需要依赖上一页数据中的最后一个对象中的某个字段作为key的情况,如评论数据的接口携带参数since和pageSize。...PositionalDataSource 我们从网络获取数据,选取玩Android 开放API中的查看某个公众号历史数据接口来获取数据。...,当第一页数据加载完成后,加载下一页数据的工作,通过callback.onResult()回传PagedList */ @Override public void loadRange...true) //设置每页的大小 .setPageSize(ArticlesDataSource.PAGE_SIZE) //设置距离底部多少条数据加载下一页数据...,设置nextKey通过LoadParams传递过来 * 设置下一页的key,判断是否有更多数据,没有置null */ @Override public void loadAfter

    2.2K11

    JetPack--Paging2

    Paging是一个用于分页加载的组件,对于一些列表数据,以前大家都使用过的一种方式是定义一个page,当达到加载更多条件时,page加一再去请求数据,为此我们要写很多重复的代码,Paging就对分页进行了一个封装...Paging由分为三个模块 1.DataSource:数据从该模块中获取,数据可以来源于网络、本地数据库等 2.PagedList:负责具体获取数据的逻辑,何时获取、加载下一页、预加载等 3.PagedListAdapter...首次加载多少条数据 .setInitialLoadSizeHint(MovieDataSource.PER_PAGE * 2) //设置距离底部还有多少条数据时开始加载下一页的数据...com.google.gson.annotations.SerializedName; import java.util.List; /** * Created by aruba on 2021/9/17. */ public class Movies { //是否还有下一页...为null,下一页传入page+1 callback.onResult(response.body().movies, null, FIRST_PAGE

    1.7K30

    RecyclerView探索之通过ItemDecoration实现StickyHeader效果

    我们可以看到,现在最上面一个 Header 消失时,它是由下面的 Header 慢慢覆盖的,我们理想的效果应该是下面的的 Header 快要到达顶部时,它向上推掉之前的 Header,然后取代它的位置。...Section1 置于 RecyclerView 顶部,它的组内的 ItemView 由于向上滑动,从它的身下穿过,它的 top 值就是 parent.getPaddingTop()。...当它组内最后一个 ItemView 的 bottom 值与 Header 的 bottom 一致时,也就是底部平齐的时候,view.getTop - mHeaderHeight 应该就是 Header...ItemView 与 Header 底部平齐的时候,判断 Header 的顶部是否小于 // parent 顶部内容开始的位置,如果小于则对 Header.top...根据是否是第一个 Header 决定 Header 是否悬停。 5. 当 Header 是悬停效果时,要注意它与组内最后一个 ItemView 的位置关系。

    1.5K10

    仿触手直播首页切换效果

    触手app主页效果图 看到这个效果图后,第一想到的就是RecyclerView貌似可以实现这种效果,但是用RecyclerView自己的api还是有很多问题的,先不说如何实现的吧,看下实现出来的效果图吧...监听SlideRecyclerView滑动位置来动态设置外层的RecyclerView是否有滑动处理。...因为在SlideRecyclerView滑动监听里面是无法监听到如果滑动到顶部时继续往下滑和滑动到底部时继续往上滑的操作,因此这里就通过ontouch的坐标该变量来是否打开外层的RecyclerView...原则是当item滑动到顶部时,若再继续往上滑禁掉外层RecyclerView滑动,若再继续往下滑打开外层RecyclerView滑动;当item滑动到中间某一个位置时,此时不管再继续往上滑还是往下滑都是禁掉外层...RecyclerView滑动;当item滑动到底部时,若再继续往上滑打开外层RecyclerView滑动,若再继续往下滑禁掉外层RecyclerView滑动。

    89320

    SwipeRefreshLayout与RecyclerView的巧夺天工

    答案当然是否,那我想要实现自己非常酷酷的ListView时候,只有自己动手实现。不过,谷歌在2015在v4开发包加入 豪华套餐SwipeRefreshLayout供你享用。...2.重写SwipeRefreshLayout 当我们重写SwipeRefreshLayout,需要使用到如下一个方法: ㈠canChildScrollUp 我们来看看其文档说明: public boolean...*/ public abstract void onRecyclerViewRefresh(); } 注释非常明确,布局中有一个linearlayout其中无任何控件,是为了扩展任何你需要的无网络时显示的界面的...swipeRefreshLayout, "没有数据得先下拉刷新", Snackbar.LENGTH_SHORT).show(); return; } //滚动事件结束并且到达最底端...而RecyclerView,虽然什么都没有,但你扩展起来要方便的多。这就是从0开始的优势。当一个框架继承了很多很多东西,那么你要修改其中的东西,那么就是牵一发而动全身。没有最适合的框架,只有最优解。

    1.8K20

    微信小程序之上拉加载与下拉刷新

    在移动端,随着手指不断向上滑动,当内容将要到达屏幕底部的时候,页面会随之不断的加载后续内容,直到没有新内容为止(我们是有底线的-o-),我们称之为上拉加载,从技术角度来说,也可以称之为触底加载。...上拉加载 前面我们已经了解到下拉加载的本质是一个分页加载,每次触发加载下一页的条件是当前页面到达底部,因此,我们可以整理出一个实现的基本思路: 初始页号为1,向后端请求第一页数据(数据中包含数据总条数...,及当前页的数据数组),返回后渲染该该页数据 监听页面是否被滚动到底部,是的话,则递增页号(+1)并向后端请求该新页号的数据,返回结果后,将该页数据添加到之前已加载的数据后面,并重新渲染 重复步骤2的操作...感觉实现起来也不难,主要就是其中的“监听页面是否被滚动到底部”如何来实现?...在Web页面开发中,我们会通过监听window.onscroll事件,在该事件的处理方法中获取当前页的高度和滚动量,以此来计算判断页面是否已滚动到底。

    4.8K20
    领券