ScrollView+RecyclerView 判断item是否显示在屏幕内

今天项目有个需求:列表滑动停止后,那几个item显示给了用户,这几个item就调用某个方法,没有显示给用户的不能调用。

1.首先第一个问题就是滑动监听

先尝试给RcyclerView添加滑动监听,结果无任何反应,这是因为滑动监听被外面的ScrollView拦截了,所以就给ScrollView添加了监听方法,监听其滑动停止,具体的方法呢网上有很多,我是借鉴的下面这个文章:

Android中监听ScrollView滑动停止和滑动到底部

然后在handleStop()内实现需求。

2.第二个问题就是获取显示给用户的item范围了

本身RecyclerView是有获取显示范围的:

获取首个完全显示给用户的item位置:findFirstCompletelyVisibleItemPosition();

获取最后一个完全显示给用户的item位置:findLastCompletelyVisibleItemPosition();

但是实际放在项目中发现是没作用的,就是比如请求第一页数据10条,这两个值返回的是0,9,这完全是整页数据,没达到目的。

然后我换个思路想了想,是否可以此时通过判断某个控件是否显示在屏幕当中来作为标准呢?说不如做,在网上查到相关方法

android 判断控件是否在屏幕范围内 是否可见

在上面RrcyclerView给的范围内进行循环遍历,对每个item进行是否显示在屏幕内的判断,如果是就调用某个方法,如果不是就不调用,结果还是挺理想的,有一个小小的问题就是一个item只显示一部分也会为true,不过这基本可以满足需求了。

不过感觉这样写很麻烦,可能也会有一些弊端,这还是要不断的测试和完善。

 
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值