问题描述
我正在尝试将 Selection ( https://developer.android.com/reference/androidx/recyclerview/selection/package-summary ) 与新的分页库(因此 paging 3 )一起使用
使用 Paging 2 是可行的,因为我们使用的是 Pagedlistadapter 并且它可以与 Selection 库一起使用,但是现在使用新的 PagingDataAdapter 我不能再让它工作了。
https://developer.android.com/reference/kotlin/androidx/paging/PagingDataAdapter
我们正在失去 getCurrentList(),setHasstableIds() 现在将返回 UnsupportedOperationException。
因此,如果有人对此感到担忧,我将不胜感激。
解决方法
在新的 Paging3 库中,您可以使用 snapShot()
类的 PagingDataAdapter
方法获取当前列表。
我最近遇到了相同的密钥提供者问题,所以我实现了一个这样的自定义:
class MyItemKeyProvider(private val adapter: MyPagingAdapter) :
ItemKeyProvider<String>(SCOPE_CACHED) {
override fun getKey(position: Int): String = adapter.snapshot().items[position].id
override fun getPosition(key: String): Int = adapter.snapshot().items.indexOfFirst { it.id == key }
,
如果您已经使用 Paging 2,我建议您从实现您自己的 ItemKeyProvider<K>
开始。无法使用打包的 StableIdKeyProvider
,因为它需要启用稳定 ID,而且如您所说,PagingDataAdapter
不支持稳定 ID。