2015-03-18 212 views
6

我試圖使用webview的滾動位置來確定SwipeRefreshLayout是否應該能夠刷新,除了一些網站例如https://jobs.lever.co/memebox,getScrollY()總是返回0.有沒有辦法確保我總能得到正確的滾動位置?WebView getScrollY()總是返回0

+0

這可能重複:http://stackoverflow.com/questions/ 2132370/android-listview-getscrolly-do-it-work – 2015-03-18 22:45:06

+0

不幸的是,我已經檢查過這個鏈接,它不能告訴我我需要什麼 – 2015-03-18 23:17:36

回答

1

您鏈接的網站有一個固定的標題。我的猜測是,頁面本身不滾動;裏面有一個容器。 WebView無法檢查頁面上的每個可滾動容器,因此它看到頂級容器不滾動並假定整個事件都已修復。

如果你所需要的只是拉到刷新,我建議除了SwipeRefreshLayout之外還增加一個刷新按鈕。

0

檢查您的網頁佈局。你的CSS中的position: relative;可能是你問題的根源。相對定位導致在WebView中滾動出現問題。

2

也許你可以嘗試把它添加到您的自定義的WebView

只要告訴它的滾動

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 
      if(this.getScrollY() <= 0){ 
       this.scrollTo(0,1); 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
    } 
    return super.onTouchEvent(event); 
} 

,然後覆蓋onScrollChanged

@Override 
protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
    super.onScrollChanged(l, t, oldl, oldt);; 
    if (iWebViewScrollListener != null && t == 0) { 
     iWebViewScrollListener .onTop(); 
    } else if (mIWebViewScroll != null && t != 0) { 
     iWebViewScrollListener .notOnTop(); 
    } 
} 

添加一個頂級聽衆打電話滾動時。什麼時候是onTop()使用setEnabled(true)爲SwipeRefreshLayout,否則setEnabled(false)

+0

我知道我們被告知要避免謝謝你的評論,但我不能幫助這個..我sp試圖弄清楚這一點,感謝百萬隊友! – Tssomas 2017-07-13 17:22:42

0

這有點老了,但是這個問題依然存在。對於任何人想知道的,我通過下面的方式解決了這個問題。

GestureListener

private class GestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 

     if(distanceY>0) webView.scrollBy(0,1); 
     else webView.scrollBy(0,-1); 
    } 
} 

現在,可以啓用/禁用swipeRefreshLayout如下正確使用getScrollY

swipeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     ViewTreeObserver observer = swipeLayout.getViewTreeObserver(); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
      observer.removeOnGlobalLayoutListener(this); 
     } else { 
      observer.removeGlobalOnLayoutListener(this); 
     } 
     observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
      @Override 
      public void onScrollChanged() { 

       if (webView.getScrollY()==0) { 
        swipeLayout.setEnabled(true); 
       } else { 
        swipeLayout.setEnabled(false); 
       } 
      } 
     }); 
    } 
});