1

Webview WebViewClient's method

public void onPageFinished(WebView view, String url) {
  ..processing code after page is loaded
}

can be used for implementing any required functionality after page has been fully loaded but it looks like this handler is triggered immediately after all the resources have finished loading and not wait until the rendering is completed. This I suspected when most of post loading activities for example scrolling to certain html elements failed. As a worked around I wrapped those function calls inside a Timer with a delay of 500 ms or more

new Timer().schedule(new TimerTask() {
  something here...
}, 500);

but it does not look reliable in all scenarios for example if page is very large 500 ms would be inadequate etc.

Can this be done differently?

duckduckgo
  • 1,280
  • 1
  • 18
  • 32

1 Answers1

1

Below are a few ways to address this issue, mostly addressed in this post. However, to my knowledge, none of them truly solve it.

1) Subclass WebView and override the invalidate() (docs) method. Occasionally this method may not be called though.

@Override
public void invalidate() {
    super.invalidate();

    if (getContentHeight() > 0) {
        // Add code here 
    }
}

2) Implementing a PictureListener using setPictureListener (docs). Note, this has been deprecated.

webView.setPictureListener(new PictureListener() {
    @Override
    public void onNewPicture(WebView webView, Picture picture) {
        // Add code here
    }
});

3) Using a WebChromeClient and overriding onProgressChanged (docs). This may be called many times during the loading of a URL.

webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);

        if (newProgress==100) {
            // Add code here
        }
    }
});
Community
  • 1
  • 1
peterrhodesdev
  • 241
  • 4
  • 14