目录
- 使用场景
- 问题描述
- 思路分析
- 解决方案
- 结语
使用场景
关于Android嵌套H5页面使用下拉刷新功能的问题:当我们在Android中使用第三方框架SmartRefreshLayout实现App的下拉刷新功能时,如果H5页面有部分功能设计到上下滑动的话,就会引起“误触”下拉刷新功能的操作,那么我们应该怎么去解决这个问题呢?
问题描述
由于我们使用的是Android的下拉刷新,并非是H5的下拉刷新,当H5页面中有个别弹窗页面(比如:地址上下滑动选择组件),遇到这个情况的都应该知道,如果不做处理,当你在使用H5地址选择页面的时候,你滑动地址选择的瞬间,由于是上下滑动,因此也会触发Android的下拉刷新,虽然下拉幅度不大,但是这个原本是不应该进行滑动的页面,它也确实因为你上下滑动选择地址的时候“误触”了下拉操作,即使它不是真正意义上的下拉刷新,但是出现这个拉动的动作,也是会引起用户体验满不好的,下面请看大致思路实现!
思路分析
相信有点熟悉Android开发的朋友在看思路分析前,已经有了自己的思路:直接在初始化下拉刷新initRefresh
()方法中验证你想要的页面能不能执行下拉操作不就行了吗?实践告诉你这个是无法实现的,因为下拉刷新方法在初始化的时候,已经实例过一次,后续调用的时候,并不会重复执行setOnRefreshListener
监听事件,只是执行它里面的onRefresh
方法,这个执行原理在此就不做详细分析了,涉及到底层原理,生命周期等问题,感兴趣的自行去研究探讨!
正确的做法可以在webView.setWebViewClient
里面的onPageFinished(WebView view, String url)
方法实现,由于onPageFinished(WebView view, String url)
中url会获取到每次点击请求的路径,所以可以该方法里面针对路径判断来区分哪个页面禁用下拉刷新功能。
解决方案
根据上述的思路分析,我们可以在Android的webView.setWebViewClient
里面的onPageFinished
这个方法中实现,具体源码参考下面:
//判断指定页面禁用下拉刷新操作
RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.swipe_refresh);
boolean address = url.contains("填H5页面请求的路由,可以是与众不同的一小段");
if (address) {
refreshLayout.setEnableRefresh(false);//是否启用下拉刷新功能
return;
}
refreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能
到此就完成了,重新执行app安装,你就会发现,你指定的页面就不能进行下拉刷新的操作了,赶紧去试试吧!祝“码”到成功!
结语
此方案仅供参考,你可以根据自行的项目需求进行优化,具体实现哪些页面禁用下拉刷新的功能,你就继续添加url.contains
就好了。