我的应用程序有一系列html文件,我想逐一向用户显示。当用户滚动到页面底部时,我想加载下一页,当他向上滚动时,我想加载上一页。为此,我需要知道用户何时滚动到最底部(或最上面)。所以我一次一个地覆盖了onOverScrolled()
和onScrollChanged()
。
@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页,滚动到底部, 然后第8页将显示(数字不同,有时我向前翻2页,有时5页......)
我该如何处理?
答案 0 :(得分:3)
作为loadNextPage
或loadPrePare
中的第一行,设置一个标志,指示webview正在重新加载。设置此标志时,请勿处理任何滚动通知。
当webview完成加载时,清除标记。您可以使用WebViewClient.onPageFinished
方法通知webview已完成加载。