最近有一个需求,需要在网页中实现下拉刷新功能,这里遇到一个坑,加载网页的时候
webview
向上滑动不了了,看了一下网上的资料尝试过后都没有用,所以在这里做一下记录,希望可以帮到大家,由于两个控件都有滑动的事件,在向下滑动的时候滑动事件被SwipeRefreshLayout
控件优先覆盖了,这里的话可以监听webview
的滑动事件对SwipeRefreshLayout
是否允许下拉刷新进行控制。
1.layout布局
复制代码
2.自定义Webview
得到onScrollChanged
方法的监听事件
public class MyWebView extends WebView { public MyWebView(Context context) { super(context); } public MyWebView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } public MyWebView(Context context, AttributeSet attributeSet, int i) { super(context, attributeSet, i); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (mScrollListener != null) { mScrollListener.onScrollChanged(t); } } public interface IScrollListener { void onScrollChanged(int scrollY); } private IScrollListener mScrollListener; public void setOnScrollListener(IScrollListener listener) { mScrollListener = listener; }}复制代码
3.初始化控件调用setOnScrollListener
接口,控制可下拉刷新时机
SwipeRefreshLayout mSwipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh); mMyWebview.setOnScrollListener(new ExplorerWebView.IScrollListener() { @Override public void onScrollChanged(int scrollY) { if (scrollY == 0) { //开启下拉刷新 mSwipeRefresh.setEnabled(true); } else { //关闭下拉刷新 mSwipeRefresh.setEnabled(false); } } });复制代码
OK,我的冲突问题解决了,不过开发中同一个需求根据项目情况实现的方式也会不一样,解决方式也会不同,这里提供的是解决方法之一。