2014-02-23 116 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