SmartRefreshLayout嵌套WebView时,下拉问题记录

问题描述:SmartRefreshLayout(1.0.5版本)中嵌套WebView时,如果开启了下拉刷新功能,会导致WebView无法向下滑动,手指向下滑动会触发SmartRefreshLayout的下拉。

解决方法:核心就是使用SmartRefreshLayout提供的滚动边界功能,当WebView滑动到顶部时,开启下拉刷新,其他情况下关闭。在SmartRefreshLayout的issue中,有同学建议让html告诉我们WebView是否到顶,但是h5同学说他们无法监听fling状态,所以由h5判断是否滑动到顶部并不准确,而且如果h5需要改的项目多的话,人家都不乐意了。所以最好还是我们自己判断。

1、首先要关闭SmartRefreshLayout的下拉刷新功能和上拉加载功能setEnableRefresh(false)和setEnableLoadMore(false)

2、要获取WebView是否滑动到顶部,可以通过WebView.setOnScrollChangeListener()来获取,但是这个API要求的版本较高。此外还可以在WebView的onScrollChanged方法中获取,写个回调传出去好了。

3、使用SmartRefreshLayout提供的滚动边界功能,当scrollY == 0时,setEnableRefresh(true)

4、做完以上步骤后,基本上滑动就正常了。但是又出现个问题,有时候快速向下滑动,页面被拉下来了,但是没有header,松手后,页面也不会自动回到顶部,这种情况的原因,个人猜测、猜测、猜测是ScrollBoundaryDecider的canRefresh方法调用,要早于WebView的onScrollChanged方法,导致页面拉下来之后(越界拖动效果),我们才获取到scrollY=0。针对这个情况,我在scrollY==0时,根据SmartRefreshLayout的状态,重新setEnableRefresh(true)。

这样页面显示基本正常,但是还是有问题,偶现松手后不会刷新,待研究。

ps:下拉问题跟网页内容有关,如果h5需要改的项目不多的话,让他们改吧。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值