【问题标题】:Android WebView ProgressBar setVisibility not workingAndroid WebView ProgressBar setVisibility 不起作用
【发布时间】:2015-08-16 16:43:05
【问题描述】:

我在 webview 上添加了一个进度条。我的问题是当 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);

这不起作用。我可以看到代码在断点处命中这一行。这一切都发生在一个片段中。

【问题讨论】:

    标签: android webview visibility android-progressbar


    【解决方案1】:

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

    private final ProgressBar ProgressBar;
    

    这意味着您的实例具有类的名称。

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

    【讨论】:

    • 变量的名称在代码中是一个错字,它是私有的 final ProgressBar progressBar。关于另一个建议,我在 WebChromeClient 类中看不到任何此类方法。我尝试了一个 onUnhandledInputEvent() 方法,但没有捕捉到后退按钮事件。
    • WebViewClient,而不是 WebChromeClient!
    【解决方案2】:

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

    new Thread(new Runnable() {
        public void run() {
    
            // webview initiation code
    
        }
    }).start();
    

    这里是how it solved my own problem,这里是the docs。

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多