【发布时间】:2021-02-19 06:22:28
【问题描述】:
我是 android kotlin 的 Paging 3 库的新手。我想要无限数据。所以我发现 Paging 3 库对我来说很有帮助。我使用 PagingSource 创建了一个列表。我没有使用房间。我有 nested recyclerView。我将 PagingDataAdapter 与 diff util 一起用于我的 Recyclerview。我使用了 codelab 推荐的分页库教程,我成功地没有任何问题。我面临更新项目的困难。我使用分页源创建列表,在列表内部我有一些来自服务器的数据。我完全没有任何问题。但是在 reyclerview 中如何更新适配器或通知数据已经改变。我已经有机制来获取更新的列表。我搜索了如何在某个地方更新适配器,但每个地方都提到使用 DataSource 中的 invalidate()。 DataSource 用于 paging 2 对吧?现在,根据Migrate to Paging 3 中的文档,这在分页 3 中。我使用 Flow 来检索数据。此代码在 viewmodel 类中。
fun createRepo(data: List<String>, repository: RepositoryData): Flow<PagingData<UnlimitData>> {
return repository.getStreamData(data).cachedIn(viewModelScope)
}
我正在传递来自服务器的列表。 getStreamData 函数返回带有 int 和 string 数据的项目。我的数据类
data class UnlimitData(val id: Int, val name: String)
createRepo 正在调用我的活动类以在 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。
提前致谢。
【问题讨论】:
标签: android kotlin nestedrecyclerview android-paging-library android-paging-3