是否可以在视图变为可见之前调用onBindViewHolder?我需要记录用户看到的视图/索引,但找不到好方法。现在,我计划监听滚动事件并继续检查第一个和最后一个可见视图,并使用该范围来检测可见的视图。这些计算将在每个滚动事件上完成 - 即使在一些优化之后,这似乎也是一个坏主意。
我使用的是LinearLayoutManager,没有预先缓存。
答案 0 :(得分:1)
onBindViewHolder()
在进入视图之前总是被调用,以便ViewHolder在出现时处于正确的状态。这可能是一个足够好的"作为ViewHolder的解决方案通常仅在其 超出范围时绑定。
我能想到的另一个解决方案可能是简单地跟踪滚动的距离。假设每个视图在屏幕上的大小相同,您可以跟踪滚动的距离。如果dy > viewHeight
那么您可以增加查看的"指数"反击一个。这个想法是你总是从索引0开始,所以索引0 - n
已经被立即查看了。然后,当用户向下滚动时,它将是0 - n+1
,0 - n+2
,依此类推。此计算速度明显快于在每次滚动时使用findFirstVisibleItemPosition()
。
您还必须考虑对setPosition
的任何有效的来电。这允许您跳转到RecyclerView,因此每次执行此操作时都必须重新计算。这就是findFirstVisibleItemPosition
调用派上用场的地方。 (无论如何你都需要这样做,因为没有调用滚动监听器。)
此外,如果您执行任何删除索引的过滤,这也会对结果产生影响,需要考虑到这一点。