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)

SmartRefreshLayout嵌套WebView时,下拉问题记录_第1张图片

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

SmartRefreshLayout嵌套WebView时,下拉问题记录_第2张图片

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

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

你可能感兴趣的:(android,学习笔记)