问题标签 [android-paging-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
558 浏览

android - DiffUtil.ItemCallback areItemsTheSame() 方法检查项目两次

我向/list.php?page=1发送请求并使用 Paging 3 组件在 UI 中显示数据。

在第一个请求中,areItemsTheSame(new, old)方法什么也不做。没有登录Logcat。

然后我用 SwipeRefreshLayout 刷新数据并请求发送相同的 api (/list.php?page=1)。

DiffUtil.ItemCallback areItemsTheSame(new, old)方法检查项目两次。一次是降序,然后是升序。

日志猫:

I: newItem: 3308 = oldItem: 3308 I: check: true
I: newItem: 3307 = oldItem: 3307 I: check: true
I: newItem: 3306 = oldItem: 3306 I: check: true
I: newItem: 3305 = oldItem: 3305 I:检查:正确
I:新项目:3304 = oldItem:3304 I:检查:正确
I:新项目:3303 = oldItem:3303 I:检查:正确
I:新项目:3302 = oldItem:3302 I:检查:正确
I: newItem:3301 = oldItem:3301 I:检查:真
I:newItem:3300 = oldItem:3300 I:检查:真
I:newItem:3300 = oldItem:3300 I:检查:真
I:newItem:3301 = oldItem:3301 I :检查:真
I:新项目:3302 = oldItem:3302 I:检查:真
I:新项目:3303 = oldItem:3303 I:检查:真
I:新项目:3304 = oldItem:3304 I:检查:真
I: newItem: 3305 = oldItem: 3305 I: check: true
I: newItem: 3306 = oldItem: 3306 I: check: true
I: newItem: 3307 = oldItem: 3307 I: check: true
I: newItem: 3308 = oldItem: 3308我:检查:真

空缺片段: 在此处输入图像描述

适配器: 在此处输入图像描述

视图模型: 在此处输入图像描述

数据源: 在此处输入图像描述

0 投票
1 回答
2026 浏览

android - 用户未到达列表底部时,Android Paging 3 和 RemoteMediator 请求列表

正如您在https://developer.android.com/topic/libraries/architecture/paging/v3-network-db中看到的那样,我正在使用 Android Paging 3 。当我运行应用程序时,RemoteMediator请求服务器获取列表,直到服务器上没有任何内容。

关键是我们想在用户到达列表底部时获取列表,但 RemoteMediator 一直在请求,直到获取服务器上的所有列表!

远程调解器.kt

LoadType.PREPENDLoadType.APPEND不断调用!

0 投票
1 回答
5082 浏览

android - 在 Paging 3 库 Android Kotlin 中更新当前页面或更新数据

我是 android kotlin 的 Paging 3 库中的新手。我想要无限数据。所以我发现 Paging 3 库对我来说很有帮助。我使用PagingSource创建了一个列表。我没有使用房间。我嵌套了recyclerView。我将PagingDataAdapterdiff util一起用于我的 Recyclerview。我使用了codelab推荐的分页库教程我成功了,没有任何问题。我面临更新项目的困难。我使用分页源创建列表,在列表内部我有一些来自服务器的数据。我完全没有任何问题。但是在 reyclerview 中如何更新适配器或通知数据已经改变。我已经有机制来获取更新的列表。我搜索了如何在某个地方更新适配器,但每个地方都提到使用来自DataSource的invalidate()DataSource第 2 页中使用对吗?现在,根据Migrate to Paging 3中的文档,这在 Paging 3 内。我使用 Flow 来检索数据。此代码在viewmodel类中。

我正在传递来自服务器的列表。getStreamData函数返回具有 int 和 string 数据的项目。我的数据类

createRepo在我的活动类中调用以在 adpater 中发送数据。

这是我的适配器代码:-

}

我使用 RetroFit 添加了在列表中插入/更新数据的逻辑。我的列表已成功更新,但我无法刷新 reyclerview。

提前致谢。

0 投票
1 回答
1713 浏览

android - 分页 3:如何在项目位置或具有特定 ID 的项目加载列表

我有一个消息列表。每条消息都有一个唯一的 GUID。

我的设置适用于正常使用:用户单击对话,列表打开,其中包含属于该对话的所有消息,按最近的顺序排列。

对话片段

会话视图模型

会话存储库

消息道


现在我的目标是能够打开已经在特定消息处滚动的对话。

我也不想加载整个对话然后滚动到消息,有些对话可能会很长,我不想让用户自动滚动可能需要很长时间才能到达特定消息。

理想情况下,我设想的正确方式是将消息 id 传递到视图中,在该消息 id 之前和之后加载一大块 X 消息,然后在它已经呈现给用户之后,RecyclerView它将加载更多如果用户上升或下降。

这并不意味着使用网络请求,整个会话已经在数据库中可用,因此它只会使用数据库中已经存在的信息。

我已经尝试理解使用ItemKeyedDataSourceor的示例PageKeyedDataSource,但我无处可去,因为每次这些示例都仅在 Kotlin 中,并且需要 Retrofit 才能工作,而我不使用。因为这些示例对于像我这样使用 Java 且不使用 Retrofit 的人来说完全没用。

如何做到这一点?

请用 Java 提供答案,而不仅仅是 Kotlin(只要它也在 Java 中,kotlin 就可以)并且请不要建议新的库。

0 投票
1 回答
643 浏览

android - Android Paging3 改变页面大小

如何使用每个页面大小不同的 paging3 库?

我正在尝试显示一个日历,其中每个页面将由一周表示,并且每周可以有 0 到 n 个会议。

我想我可以使用今天作为数据源中的分页键进行初始加载,±7 天用于上一页/下一页,例如:

但是我面临一个问题,我无法提前知道特定一周将举行多少次会议。

有没有一种方法可以让我不必指定 pageSize 而只需使用分页键(在本例中为 ZonedDateTime)进行分页?

0 投票
1 回答
348 浏览

android - Pager构造函数中的initialKey参数有什么作用

我试图了解构造函数initialKey中的作用Pager,但我找不到任何解释,甚至在官方文档中也找不到:

https://developer.android.com/reference/kotlin/androidx/paging/Pager#%3Cinit%3E(androidx.paging.PagingConfig,%20androidx.paging.Pager.Key,%20androidx.paging.RemoteMediator,%20kotlin.功能0)

在此处输入图像描述


谁能解释它的作用或工作原理以及如何使用它?

0 投票
1 回答
311 浏览

android - 如何向 PagingDataAdapter 提交非 pagingData(只是对象列表)?

我刚刚使用paging 3库实现了分页。所以,我根据文档做了一切。

我从后端查询了一个帖子列表,它使用 next 和 prev 键进行分页,这就是我决定使用分页 3 的原因。然后,在 viewModel 中将其转换为 PagindData 后,我使用 submitData 将其提交给适配器。好的,但是我有一个显示类别列表的微调器,我想按类别显示帖子。按类别发布的帖子也来自后端,但它没有分页,它只是作为对象列表来的。问题是如何按类别将这个帖子列表传递给我的回收器视图,该视图与 PagingData 一起使用?我应该按类别将帖子转换为 pagingData 吗?谢谢。

0 投票
0 回答
281 浏览

android - Android Paging 3 With RemoteMediator,无法添加页眉或页脚

当我将 RemoteMediator 放在 Pager 构造函数中时,页眉或页脚没有显示,只有在我删除 RemoteMediator 时才有效。我可以知道这是 Paging 3 的错误吗?谢谢。

0 投票
0 回答
66 浏览

android - 如何在 MVVM [Android] 中将 PagingData 与本地数据库进行比较

嘿,我有一个底部导航视图和多个片段,确切地说是它们的 3 个片段->

  1. Home -> 根据是否保存显示来自分页 API 的随机图像,带有心形图标
  2. 搜索 -> 根据是否保存从带有心形图标的分页 API 中搜索带有查询的图像
  3. 已保存-> 显示带有活动心形图标的已保存图像

我的问题是,当我从分页 api 获取数据时,我将其与分页资源中的数据进行比较,它工作正常,但是当我保存图像并转到保存的片段并在家里取消保存时,它仍然显示已保存,这是正确的在逻辑上,但除了让数据库访问适配器之外,我找不到任何其他方法来解决这个问题,但这又是针对 mvvm

我正在使用房间数据库分页 3 库和 mvvm 架构模式

0 投票
1 回答
1036 浏览

android - Android Room Paging3 动态过滤的正确方法

我正在研究新的 Android Room Paging 库

我的源数据库表大约有 10,000 行,我按名称字段的第一个字符进行过滤,如下所示:-

存储库

视图模型

分段

这是lifecycleScope.launch {...}每次更改 Starts With 字符时重复使用的正确方法吗?

我应该被map{}switchMap{}MutabaleLiveData<String>for StartwWith 触发吗?