我在网页浏览中添加了一个进度条。我的问题是当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);
这不起作用。我可以看到代码在断点上击中这一行。所有这一切都发生在片段中。
答案 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。