在RecyclerView中获取可见的项目
我需要知道哪些元素当前显示在我的RecyclerView。 ListViews上没有等效于OnScrollListener.onScroll(...)
方法。 我试图与View.getGlobalVisibleRect(...)
一起工作,但是这个黑客太难看了,并不总是工作。
有人有什么想法?
第一个/最后一个可见的孩子取决于LayoutManager
。 如果您正在使用LinearLayoutManager
或GridLayoutManager
,则可以使用
int findFirstVisibleItemPosition(); int findFirstCompletelyVisibleItemPosition(); int findLastVisibleItemPosition(); int findLastCompletelyVisibleItemPosition();
例如:
GridLayoutManager layoutManager = ((GridLayoutManager)mRecyclerView.getLayoutManager()); int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
对于LinearLayoutManager
,first / last取决于适配器的顺序。 不要从RecyclerView
查询孩子; LayoutManager
可能更愿意布置更多的项目而不是可见的caching。
您可以使用recyclerView.getChildAt()
来获取每个可见子项,并在适配器代码的这些视图上设置一些标记convertview.setTag(index)
将帮助您将其与适配器数据关联起来。
为StaggeredGridLayoutManager
做到这一点:
RecyclerView rv = findViewById(...); StaggeredGridLayoutManager lm = new StaggeredGridLayoutManager(...); rv.setLayoutManager(lm);
并获得可见的项目视图:
int[] viewsIds = lm.findFirstCompletelyVisibleItemPositions(null); ViewHolder firstViewHolder = rvPlantios.findViewHolderForLayoutPosition(viewsIds[0]); View itemView = viewHolder.itemView;
记得检查一下是否为空。