我已经用ItemKeyedDataSource实现了新的PagedListAdapter。我的列表包含带有“喜欢”按钮的供稿项目。单击“赞”按钮应刷新该项目。
要通过单击类似按钮刷新我的列表项,我更新了Firestore后端的状态,并在ItemKeyedDataSource上调用了invalidate。但这将刷新我的整个列表,同时又跳回到列表的顶部。
我不确定这是否是正常行为,所以我进行调试并检查maiby我的DiffUtil.ItemCallback是问题所在。但是,永远不会调用这两个方法(areItemsTheSame和areContentsTheSame)。
那么在DataSource上调用invalidate是触发单个项目更新的方法吗? DiffUtil是否可以帮助我在更新后跟踪列表中的位置,还是我看错了方向?
答案 0 :(得分:3)
您可以像普通适配器一样进行修改,唯一的区别是您将使用SwiftUI
getItem(position)
答案 1 :(得分:0)
经过一番挖掘,我找到了以下解决方案:
要更新单个项目
您可以在适配器上调用notifyItemChanged。这将从数据源获取更新并更新列表项。
feedDataSourceFactory.feedLiveData.value!!.invalidate()
刷新所有数据
您可以在数据源上调用无效
inv