甚至在视图可见之前就会调用RecyclerView onBindViewHolder

时间:2016-08-19 20:22:48

标签: android android-recyclerview

是否可以在视图变为可见之前调用onBindViewHolder?我需要记录用户看到的视图/索引,但找不到好方法。现在,我计划监听滚动事件并继续检查第一个和最后一个可见视图,并使用该范围来检测可见的视图。这些计算将在每个滚动事件上完成 - 即使在一些优化之后,这似乎也是一个坏主意。

我使用的是LinearLayoutManager,没有预先缓存。

1 个答案:

答案 0 :(得分:1)

事实上,

onBindViewHolder()在进入视图之前总是被调用,以便ViewHolder在出现时处于正确的状态。这可能是一个足够好的"作为ViewHolder的解决方案通常仅在其 超出范围时绑定。

我能想到的另一个解决方案可能是简单地跟踪滚动的距离。假设每个视图在屏幕上的大小相同,您可以跟踪滚动的距离。如果dy > viewHeight那么您可以增加查看的"指数"反击一个。这个想法是你总是从索引0开始,所以索引0 - n已经被立即查看了。然后,当用户向下滚动时,它将是0 - n+10 - n+2,依此类推。此计算速度明显快于在每次滚动时使用findFirstVisibleItemPosition()

您还必须考虑对setPosition的任何有效的来电。这允许您跳转到RecyclerView,因此每次执行此操作时都必须重新计算。这就是findFirstVisibleItemPosition调用派上用场的地方。 (无论如何你都需要这样做,因为没有调用滚动监听器。)

此外,如果您执行任何删除索引的过滤,这也会对结果产生影响,需要考虑到这一点。