如何使用 RecyclerView 的 SelectionTracker 在不长按的情况下选择第一个项目

2022-09-03 14:13:47

我正在构建一个应用程序,允许用户从RecyclerView列表中进行选择,突出显示他们的选择。问题是,为了首次突出显示项目,需要长按。(之后,短按一下就足以进行选择。

我没有在文档中找到任何内容来说明为什么会发生这种情况。

我正在使用选择追踪器

特别遵循本指南

代码如下https://github.com/marcosholgado/multiselection

期望值:我希望每次有人短按回收站视图上的项目时都会被选中。

现实:为了第一次选择一个项目,用户需要长按它。

有什么想法吗?


答案 1

只需覆盖SelectionHotspot即可返回true。这就是您所需要的一切

fun getItemDetails(): ItemDetailsLookup.ItemDetails<Long> =
            object : ItemDetailsLookup.ItemDetails<Long>() {
                override fun getPosition(): Int = adapterPosition
                override fun getSelectionKey(): Long? = itemId
                override fun inSelectionHotspot(e: MotionEvent): Boolean { return true }
            }

答案 2

虽然我想不出一个不涉及重新实现a和a的解决方案(如指南中所述),但有一个巧妙的技巧来实现您想要的行为。MotionInputHandlerSelectionTracker.Builder

我们知道,只需单击一下即可选择项目,只要不为空。这意味着,如果我们在未与实际列表项关联的中保存了一些特殊键,我们实际上会以这种方式“激活”单击选择模式。但是,我们还必须确保我们不提供相同的特殊密钥来保持数据一致性。TouchInputHandlerSelectionTrackerSelectoinTrackerKeyProvider

因此,假设您已经选择了一个特殊的键,例如,激活和停用选择模式现在是调用或的问题。然后,您可以随心所欲地执行这些调用,无论是具有激活和停用选择模式的按钮,还是在托管视图创建过程中简单地调用该模式,即 等。ghostKeymSelectionTracker.select(ghostkey)mSelectionTracker.clearSelection()onCreateonCreateView

如果您使用的是 Kotlin,您还可以定义一些扩展来包装这些调用,以便您能够执行以下操作:mSelectionTracker.enable()mSelectionTracker.disable()


推荐