gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:49:00 24 4
gpt4 key购买 nike

我是 android kotlin 的 Paging 3 库中的新手。我想要无限数据。所以我发现 Paging 3 库对我来说很有帮助。我用了寻呼源 创建一个列表。我没有使用房间。我有 嵌套 回收站 View 。我正在使用 分页数据适配器 差异实用程序 对于我的 Recyclerview。我使用了来自 的 Paging 库推荐教程代码实验室 我成功了,没有任何问题。我面临更新项目的困难。我使用分页源创建列表,在列表内部我有一些来自服务器的数据。我完全没有任何问题。但是在 reyclerview 中如何更新适配器或通知数据已经改变。我已经有机制来获取更新的列表。我搜索了如何在某个地方更新适配器,但每个地方都提到要使用 无效()来自 数据源 . 数据源 用于寻呼 2 正确的?。现在,根据 Migrate to Paging 3 中的文档,这在分页 3 中。 .我使用 Flow 来检索数据。此代码在 内 View 模型 类(class)。

fun createRepo(data: List<String>, repository: RepositoryData): Flow<PagingData<UnlimitData>> {
return repository.getStreamData(data).cachedIn(viewModelScope)
}
我正在传递来自服务器的列表。 获取流数据 函数返回具有 int 和 string 数据的项目。我的数据类
data class UnlimitData(val id: Int, val name: String)
创建 repo 在我的 Activity 类中调用以在 adpater 中发送数据。
lifecycleScope.launch {
viewModel.createRepo(serverData,repository).collectLatest { data ->
adapter.submitData(data)
}
}
这是我的适配器代码:-
class unlimitedAdapter() :
PagingDataAdapter<UnlimitData, RecyclerView.ViewHolder>(COMPARATOR) {

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val item = getItem(position)
if (item != null) {
(holder as UnlimitedViewHolder).bind(item)
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return UnlimitedViewHolder.create(parent)
}

companion object {
private val COMPARATOR = object : DiffUtil.ItemCallback<UnlimitData>() {
override fun areItemsTheSame(oldItem: UnlimitData, newItem: UnlimitData): Boolean =
oldItem.id == newItem.id

override fun areContentsTheSame(oldItem: UnlimitData, newItem: UnlimitData): Boolean = oldItem == newItem
}
}
}
我使用 RetroFit 添加了在列表中插入/更新数据的逻辑。我的列表已成功更新,但我无法刷新 reyclerview。
提前致谢。

最佳答案

为了分页获取新项目,您需要调用 PagingSource.invalidate()通知Pager它需要获取一个新的PagingSource并重新加载页面。您需要跟踪所有 PagingSource当您从网络更新支持数据集时,您的工厂会生产并使它们失效。
编辑:像这样的东西,但这是一个非常粗糙的原型(prototype)

abstract class InvalidatingPagingSourceFactory<K,V> : () -> PagingSource<K,V> {
private val list = mutableListOf()

abstract fun create()

override final fun invoke() {
create().also { list.add(it) }
}

fun invalidate() {
while (list.isNotEmpty()) { list.removeFirst().invalidate() }
}
}

关于android - 在 Paging 3 库 Android Kotlin 中更新当前页面或更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64715949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com