在分页 3 中使用 recyclerview 选择

问题描述

我正在尝试将 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。