我需要知道我的RecyclerView当前显示哪些元素 . ListViews上没有等效的OnScrollListener.onScroll(...)方法 . 我尝试使用View.getGlobalVisibleRect(...),但是这个黑客太丑了,并不总是有用 .
有人有什么想法吗?
我需要知道我的RecyclerView当前显示哪些元素 . ListViews上没有等效的OnScrollListener.onScroll(...)方法 . 我尝试使用View.getGlobalVisibleRect(...),但是这个黑客太丑了,并不总是有用 .
有人有什么想法吗?
4 回答
最后,我找到了一个解决方案,可以从适配器中的onBindViewHolder事件中了解当前项是否可见 .
关键是LayoutManager中的方法 isViewPartiallyVisible .
在适配器中,您可以从recyclerView获取LayoutManager,您可以从onAttachedToRecyclerView事件获取该管理器 .
您可以使用
recyclerView.getChildAt()
获取每个可见子项,并在适配器代码中的这些视图上设置一些标记convertview.setTag(index)
将帮助您将其与适配器数据相关联 .对于
StaggeredGridLayoutManager
这样做:并获得可见的项目视图:
记得检查一下是否为空 .
第一个/最后一个可见的孩子取决于
LayoutManager
. 如果您使用LinearLayoutManager
或GridLayoutManager
,则可以使用例如:
对于
LinearLayoutManager
,first / last取决于适配器的排序 . 不要查询来自RecyclerView
的儿童;LayoutManager
可能更喜欢布局比缓存可见的更多项目 .