swipeRefreshLayout与webview滑动冲突

遇到这么个bug,webview使用swipeRefreshLayout时,下拉时事件不会被webview捕获,而是执行swipeRefreshLayout的刷新,网上一大堆一大堆的解决办法,都是什么重写swipeRefreshLayout或者重写WebView,本来为了快点解决bug copy了一下,结果发现妈的智障。。。琢磨了一下,很简单的一个事。。。

mWebView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
    @Override
    public void onScrollChange(View view, int i, int i1, int i2, int i3) {
        if (mWebView.getScrollY() == 0){
            swipeRefreshLayout.setEnabled(true);
        }else {
            swipeRefreshLayout.setEnabled(false);
        }
    }
});

 


直接给webview加个监听器,这个方法貌似在android不同版本会出现不兼容的情况。。。所以又有另外一种方法,重写onScrollChanged
public class WebView4Scroll extends WebView {

    private SwipeRefreshLayout swipeRefreshLayout;

    public WebView4Scroll(Context context, SwipeRefreshLayout swipeRefreshLayout){
        super(context);
        this.swipeRefreshLayout = swipeRefreshLayout;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (this.getScrollY() == 0){
            swipeRefreshLayout.setEnabled(true);
        }else {
            swipeRefreshLayout.setEnabled(false);
        }
    }
}

重写webview,重写onScrollChanged,这次终于能完美解决了!

 

重点:本质上还是要理解事件分发机制

posted @ 2016-12-06 11:23  DevLi  阅读(6428)  评论(0)    收藏  举报