2014-02-23 96 views
1

我的应用程序有一系列的html文件,我想逐个显示给用户。当用户滚动到页面底部时,我想加载下一页,当他向上滚动时,我想加载上一页。为此,我需要知道用户何时滚动到最底层(或最顶层)。因此,我一次只覆盖了onOverScrolled()onScrollChanged()WebView最顶层和最底层

@Override 
protected void onScrollChanged(int l, int t, int oldl, int oldt) 
{ 
    super.onScrollChanged(l, t, oldl, oldt); 
    int height = (int) Math.floor(this.getContentHeight() * this.getScale()); 
    int webViewHeight = this.getMeasuredHeight(); 
    if(this.getScrollY() + webViewHeight >= height) 
    { 
     loadNextPage(); 
    } 
} 

@Override 
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) 
{ 
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); 
    if(clampedY) 
    { 
     if (!(canScrollVertically(SCROLL_DOWN))) 
      loadNextPage(); 
     else if (!(canScrollVertically(SCROLL_UP))) 
      loadPrePage(); 
    } 
} 

这两个代码的工作,但问题是有时代码被调用多次。假设我在第1页,滚动到底部, 然后而不是第2页,第8页将显示(数量不同,有时我得到2页向前,有时5页...)

如何可以我处理这个?

+0

试着用javaScript做同样的事 – NickF

+0

@NickF:有什么不同? – mehdok

+0

我不确定,但我认为你遇到的这个问题是因为当你滚动到最后时,WebView滚动保持超滚动模式,并且当加载新页面时,WebView加载下一页。 – NickF

回答

2

作为loadNextPageloadPrePare中的第一行,设置一个标志,指示webview正在重新加载。设置此标志时不处理任何滚动通知。

当webview完成加载时,清除标志。您可以通过使用WebViewClient.onPageFinished方法获得webview已完成加载的通知。

+0

谢谢,工作正常。我把if语句变成这样:在onPageFinished()中设置'if(clampedY&reloadFlag)'并设置'reloadFlag = true;'' – mehdok