假设我有10个项目的recyclerview。在这10个中,0 - 4一次可见。向下滚动时,第0个元素离开屏幕,第5个元素进入。我想跟踪这些事件 - 我知道元素0 - 4是可见的然后滚动,1-5是。
反正有没有实现这个目标?我想跟踪用户在Recyclerview的特定项目上花费多长时间。
答案 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 LayoutManager
和RxJava Subscribers
来跟踪项目可见性是否达到阈值
https://proandroiddev.com/detecting-list-items-perceived-by-user-8f164dfb1d05