首页 > 解决方案 > 使用 recyclerview-selection 库时,RecyclerView 不会收到有关视觉更改的通知

问题描述

我已经成功实现了 recyclerview-selection 库。现在我正在尝试使用方法制作一个“选择所有项目”按钮SelectionTracker.setItemsSelected(keys: Iterable<K>, selected: boolean)。到目前为止,一切都很好。我现在的问题是一些看不见的物品没有得到目视检查。但是,如果我在按下按钮之前向下滚动到列表末尾,就会发生这种情况。在引擎盖下,所有项目都经过检查,我可以在应用栏的文本中看到这些项目。

示例:我滚动到列表的末尾并备份,然后按“选择所有项目”按钮。正如您在图片中看到的,有些项目在视觉上没有被检查。

'n' 和 'o' 没有被检查

如果我按下后退按钮删除所有项目的选中状态,也会发生类似的事情。


现在我的问题是:recyclerview 库中是否存在导致这种奇怪的 gui 行为的错误,或者我做错了什么?我正在使用以下版本:recyclerview-selection:1.1.0-rc03


编辑:

这里是我的 RecyclerView.ViewHolder 类的绑定方法:

fun bind(event: Event, selected: Boolean) {
    val imgSize = if (selected) SELECTION_IMG_EXTENDED_SIZE else SELECTION_IMG_REDUCED_SIZE
    animateResize(imgSize, ...)
}

标签: androidkotlinandroid-recyclerviewnotifydatasetchanged

解决方案


根据文档,我通过覆盖以下方法解决了问题:

RecyclerView.Adapter:

override fun onViewAttachedToWindow(holder: RecyclerView.ViewHolder) {
      val isSelected = selectionTracker.isSelected(holder.itemId)
      holder.setItemSelected(isSelected)
}

我不知道这是否是解决问题的推荐方法,但也许它会帮助某人。如果您对我有更多提示或信息,请告诉我!


推荐阅读