跟踪当前在屏幕上可见的列表中的所有项目

Tracking what all items of a list are currently visible on the screen

假设我有一个包含 10 个项目的 recyclerview。在这 10 个中,0 - 4 个是一次性可见的。向下滚动时,第 0 个元素离开屏幕,第 5 个元素进入。我想跟踪这些事件 - 在那里我知道元素 0 - 4 是可见的,然后在滚动时,1-5 是可见的。

有什么办法可以实现吗?我想跟踪用户在 recyclerview 的特定项目上花费的时间。

在 RecyclerView 上设置 addOnScrollListener 并获取第一个和最后一个可见行

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            int firstVisiblePosition = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
            int lastVisiblePosition = ((LinearLayoutManager)recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();

            // Now you can easily get all rows b/w first and last item
        }
    }
});

您可以使用网格/线性布局方法(findFirstVisibleItemPosition()findLastVisibleItemPosition()findFirstCompletelyVisibleItemPosition()findLastCompletelyVisibleItemPosition())来跟踪可见和完全可见的项目

如果你想跟踪is item visible on screen 一些threshold意味着user spent enough time to view the content那么你可以参考下面的博客。

一个非常好的博客,它演示了如何使用 scroll callbacks of LayoutManagerRxJava Subscribers 来跟踪项目可见性满足阈值 https://proandroiddev.com/detecting-list-items-perceived-by-user-8f164dfb1d05