在 WebViewClient 的 onPageStarted 顯示 ProgressDialog,onPageFinished 關閉,避免 AsyncTask 導致的時序問題。
webView.setWebViewClient(new WebViewClient() {
private ProgressDialog progressDialog;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressDialog = ProgressDialog.show(MainActivity.this, "", "載入中...", true);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
super.onReceivedError(view, request, error);
}
});
webView.loadUrl("https://example.com");
ProgressDialog 已棄用 (API 26+),建議改用 ProgressBar 內嵌於佈局或 SwipeRefreshLayout。WebChromeClient.onProgressChanged。