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

时间:2017-03-15 13:24:38

标签: android android-recyclerview android-view

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

反正有没有实现这个目标?我想跟踪用户在Recyclerview的特定项目上花费多长时间。

2 个答案:

答案 0 :(得分:3)

在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
        }
    }
});

答案 1 :(得分:0)

您可以使用网格/线性布局方法(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