首页 > 解决方案 > 检查 Url 完全加载的 Webview

问题描述

我想显示一个进度条,直到所有资源都加载完毕。我试过下面的代码,但是当资源开始加载时progressBar会消失。

dataBinding.webviewGallery.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (!loadingFinished) {
                redirect = true;
            }
            return false;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            loadingFinished = false;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            if (!redirect) {
                loadingFinished = true;
            }

            if (loadingFinished && !redirect && !loadingError) {
                dataBinding.progressBar.setVisibility(View.GONE);
            } else {
                redirect = false;
            }
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
            dataBinding.progressBar.setVisibility(View.GONE);
            loadingError = true;
            Toast.makeText(requireActivity(), "Failed to load URL. Please try again later.", Toast.LENGTH_SHORT).show();
            goHome();
        }
    });

我也尝试过 WebChromeClient,它也不起作用。

dataBinding.webviewGallery.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                dataBinding.progressbarWebpage.setProgress(newProgress);
                if(newProgress==100){
                    dataBinding.progressbarWebpage.setVisibility(View.GONE);
                }
            }
        });

是否有正确的方法来查找 URL 何时完全加载?TIA

标签: androidandroid-webviewwebviewclientwebchromeclient

解决方案


您的问题的原因是因为您正在 onProgressChanged() 上编写代码。只要进度发生变化,就会执行此函数。在您的情况下,进度的初始值为 0,因为进度没有开始。当progresd 开始时,即progress 值改变,函数被执行,因此progress 消失了。解决方案:使用 onprogresscompleted() 函数添加您的进度逻辑。


推荐阅读