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