Android WebView应用首次启动ProgressBar不显示且重写方法报错
问题分析与解决方案
一、修复onPageStarted重写报错
你遇到的method does not override method from its superclass错误,本质是方法签名不匹配。WebView的WebViewClient中onPageStarted的正确签名如下,检查你的代码是否参数类型、数量有误:
@Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); // 这里写显示ProgressBar的逻辑,比如 progressBar.setVisibility(View.VISIBLE); }
注意:这个方法必须写在WebViewClient的子类内部,不能直接放在MainActivity中重写。
二、解决首次启动不显示ProgressBar的问题
首次加载页面时onPageStarted可能未被及时触发,或者你没提前触发加载器显示,按以下步骤处理:
- 在
onCreate中先手动显示ProgressBar,再加载初始URL:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ProgressBar progressBar = findViewById(R.id.progressBar); WebView webView = findViewById(R.id.webView); // 先显示加载器 progressBar.setVisibility(View.VISIBLE); // 配置WebViewClient,监听页面加载状态 webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); progressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); progressBar.setVisibility(View.GONE); } }); // 加载初始页面 webView.loadUrl("你的初始网页地址"); } - 确保布局中的ProgressBar默认隐藏(设置
android:visibility="gone"),避免未加载时显示。 - 如果是缓存导致初始加载无触发,可关闭WebView缓存:
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
三、额外注意事项
- 必须在
onPageFinished方法中隐藏ProgressBar,防止加载完成后加载器残留。 - 若WebView设置了
WebChromeClient,也可以通过onProgressChanged方法监听加载进度,更精准控制加载器显示。
内容的提问来源于stack exchange,提问作者Rejoanul Alam
相关产品推荐
相关产品推荐

