ListView中item浏览事件埋点

1.背景

最近遇到一个需求:一个ListView中有30多个item,每个item划入屏幕算一次item的浏览事件,并且如果在很快的时间内(例如1秒)又划出了屏幕,就不算浏览事件。

之前一直都是RecyclerView,对于RecyclerView可以通过重写onViewAttachedToWindow(VH holder)和onViewDetachedFromWindow(VH holder)这两个方法完成这个功能。ListView是否也有类似的机制呢(也行你会问为啥不用RecyclerView,因为老的代码用的是ListView,逻辑很复杂,重构成RecyclerView太耗时耗力了)

找了一上午,终于找到了解决办法,关键的代码就是需要实现AbsListView.RecyclerListener接口并在onMovedToScrapHeap(View view)方法里面实现相应的功能(实现了类似RecyclerView的onViewDetachedFromWindow(VH holder)方法的功能):即在item离开屏幕的时候系统会回调这个方法

2.AbsListView.RecyclerListener


AbsListView.RecyclerListener

3.实现思路

3.1 item划入屏幕埋点

 item划入屏幕的时候会调用Adapter的getView方法。在这个方法里面发送一个延迟消息(1秒后进行item浏览事件的埋点)


item划入屏幕埋点

3.2 item划出屏幕取消埋点

item划出屏幕的时候,系统会调用onMovedToScrapHeap方法。在这个方法里面取消延迟消息的发送(这样就达到了快速滑动的时候不计入浏览埋点,而正常情况下会计入浏览埋点的功能)


item划出屏幕取消埋点

3.github

https://github.com/fightingBirdCaiy/Util  入口类为ListViewCtrActivity

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容