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


ListView中item浏览事件埋点_第1张图片
AbsListView.RecyclerListener

3.实现思路

3.1 item划入屏幕埋点

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


ListView中item浏览事件埋点_第2张图片
item划入屏幕埋点

3.2 item划出屏幕取消埋点

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


ListView中item浏览事件埋点_第3张图片
item划出屏幕取消埋点

3.github

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

你可能感兴趣的:(ListView中item浏览事件埋点)