今天项目有个需求:列表滑动停止后,那几个item显示给了用户,这几个item就调用某个方法,没有显示给用户的不能调用。
1.首先第一个问题就是滑动监听
先尝试给RcyclerView添加滑动监听,结果无任何反应,这是因为滑动监听被外面的ScrollView拦截了,所以就给ScrollView添加了监听方法,监听其滑动停止,具体的方法呢网上有很多,我是借鉴的下面这个文章:
Android中监听ScrollView滑动停止和滑动到底部
然后在handleStop()内实现需求。
2.第二个问题就是获取显示给用户的item范围了
本身RecyclerView是有获取显示范围的:
获取首个完全显示给用户的item位置:findFirstCompletelyVisibleItemPosition();
获取最后一个完全显示给用户的item位置:findLastCompletelyVisibleItemPosition();
但是实际放在项目中发现是没作用的,就是比如请求第一页数据10条,这两个值返回的是0,9,这完全是整页数据,没达到目的。
然后我换个思路想了想,是否可以此时通过判断某个控件是否显示在屏幕当中来作为标准呢?说不如做,在网上查到相关方法
android 判断控件是否在屏幕范围内 是否可见
在上面RrcyclerView给的范围内进行循环遍历,对每个item进行是否显示在屏幕内的判断,如果是就调用某个方法,如果不是就不调用,结果还是挺理想的,有一个小小的问题就是一个item只显示一部分也会为true,不过这基本可以满足需求了。
不过感觉这样写很麻烦,可能也会有一些弊端,这还是要不断的测试和完善。