在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; 
记得检查一下是否为空。