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

자바 스크립트 – NickF

+0

과 동일하게 수행하십시오. @NickF : 다른 점은 무엇입니까? – mehdok

+0

잘 모르겠습니다 만,이 문제는 웹 스크롤이 오버 스크롤 모드로 유지 될 때까지 스크롤 할 때 새 페이지가로드 될 때 WebView가 다음 페이지를로드하기 때문에 발생한다고 생각합니다. – NickF

답변

2

loadNextPage 또는 loadPrePare의 첫 번째 줄에 웹보기가 다시로드되고 있음을 나타내는 플래그를 설정합니다. 이 플래그가 설정되어있는 동안 스크롤 알림을 처리하지 마십시오.

웹보기로드가 완료되면 플래그를 지 웁니다. WebViewClient.onPageFinished 메서드를 사용하여 webview로드가 완료되었음을 알릴 수 있습니다.

+0

감사합니다. 잘 작동합니다. 나는 if 문을 다음과 같이 바꾼다 : onPageFinished()에서'if (clampedY & reloadFlag)'와'reloadFlag = true;를 설정한다. – mehdok

관련 문제