Android WebView ProgressBar setVisibility无法正常工作

时间:2015-06-02 18:23:55

标签: android webview visibility android-progressbar

我在网页浏览中添加了一个进度条。我的问题是当webview正在加载一个url并且进度条显示进度并且我回击按钮时,进度条仍然保持加载直到它完成并显示在它不应该的后页。

 ProgressBar progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar);
 webView.setWebChromeClient(new CustomWebChromeClient(progressBar));
 private static class CustomWebChromeClient extends WebChromeClient {

    private static final int MAX_PROGRESS = 100;
    private final ProgressBar progressBar;

    public CustomWebChromeClient(ProgressBar webProgress) {
        progressBar = webProgress;
    }

    @Override
    public void onProgressChanged(WebView web, int newProgress) {
        boolean stillLoading = isStillLoading(newProgress);
        if (hasWebProgress()) {
            progressBar.setProgress(newProgress);
            progressBar.setVisibility(stillLoading ? View.VISIBLE : View.GONE);
        }
        super.onProgressChanged(web, newProgress);
    }

    private boolean isStillLoading(int newProgress) {
        return newProgress < MAX_PROGRESS;
    }

    private boolean hasWebProgress() {
        return progressBar != null;
    }
}

OnBackPressed,当我尝试

progressBar.setVisibility(View.GONE);

这不起作用。我可以看到代码在断点上击中这一行。所有这一切都发生在片段中。

2 个答案:

答案 0 :(得分:0)

首先,你的命名有问题。在你的WebChromeClient中声明

private final ProgressBar ProgressBar;

表示您的实例具有Class的名称。

第二,您应该将ProgressBar与WebView一起放在WebView的Relative或LinearLayout之外。在WebViewClient中,您还必须在完成加载或加载失败时隐藏ProgressBar。

答案 1 :(得分:0)

您是否尝试过将webview启动代码放入这样的工作线程中?

new Thread(new Runnable() {
    public void run() {

        // webview initiation code

    }
}).start();

以下是how it solved my own problem&amp;这里是the docs