获取 RecyclerView 中的可见项目

新手上路,请多包涵

我需要知道我的 RecyclerView 中当前显示了哪些元素。 ListViews 上没有与 OnScrollListener.onScroll(...) 方法等效的方法。我尝试与 View.getGlobalVisibleRect(...) 一起工作,但是那个 hack 太难看而且并不总是有效。

有人有什么想法吗?

原文由 rekire 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 711
2 个回答

第一个/最后一个可见的孩子取决于 LayoutManager 。如果您使用的是 LinearLayoutManagerGridLayoutManager ,您可以使用

int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();

例如:

 GridLayoutManager layoutManager = ((GridLayoutManager)mRecyclerView.getLayoutManager());
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();

对于 LinearLayoutManager ,第一个/最后一个取决于适配器顺序。不要从 RecyclerView 查询孩子; LayoutManager 可能更喜欢布局比可见缓存更多的项目。

原文由 yigit 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于那些在 Kotlin 中寻找答案的人:

 fun getVisibleItem(recyclerView : RecyclerView) {
        recyclerView.addOnScrollListener(object: RecyclerView.OnScrollListener() {
            override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
                 if(newState == RecyclerView.SCROLL_STATE_IDLE) {
                     val index = (recyclerView.layoutManager.findFirstVisibleItemPosition
                     //use this index for any operation you want to perform on the item visible on screen. eg. log(arrayList[index])
                 }
            }
        })
    }

您可以根据您的用例探索其他获取职位的方法。

 int findFirstCompletelyVisibleItemPosition()
int findLastVisibleItemPosition()
int findLastCompletelyVisibleItemPosition()

原文由 Shubham 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题