首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码webview帖子加载操作

问编码webview帖子加载操作
EN

Stack Overflow用户
提问于 2015-03-04 16:21:22
回答 1查看 86关注 0票数 1

Webview WebViewClient的方法

代码语言:javascript
复制
public void onPageFinished(WebView view, String url) {
  ..processing code after page is loaded
}

可用于在页面完全加载后实现任何所需的功能,但看起来此处理程序是在所有资源完成加载后立即触发的,而不是等到呈现完成。当大多数post加载活动,例如滚动到某些html元素失败时,我就怀疑到了这一点。作为一种变通方法,我将这些函数调用包装在一个延时为500ms或更长的计时器中

代码语言:javascript
复制
new Timer().schedule(new TimerTask() {
  something here...
}, 500);

但它并不是在所有情况下都看起来可靠,例如,如果页面非常大,500ms将是不够的,等等。

这可以用不同的方式来做吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-04 17:38:31

以下是解决此问题的几种方法,主要在this post中解决。然而,据我所知,它们都没有真正解决这个问题。

1)子类化WebView并重写invalidate() (docs方法。不过,有时可能不会调用此方法。

代码语言:javascript
复制
@Override
public void invalidate() {
    super.invalidate();

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

2)使用setPictureListener (docs.请注意,这已被弃用。

代码语言:javascript
复制
webView.setPictureListener(new PictureListener() {
    @Override
    public void onNewPicture(WebView webView, Picture picture) {
        // Add code here
    }
});

3)使用WebChromeClient并覆盖onProgressChanged (docs.在加载URL的过程中,这可能会被调用多次。

代码语言:javascript
复制
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);

        if (newProgress==100) {
            // Add code here
        }
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28849591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档