我对 Webview 有疑问。我正在编写我自己的 WebChromeClient 类来覆盖 onProgressChanged 方法,因为我想在页面完成加载时显示它,然后隐藏启动画面。因为我只希望它发生在特定的 URL 上,所以我将实际的 WebView URL 与特定的字符串进行比较,但是有一个问题,当 webview.getUrl()
方法被调用时,我得到一个空指针我的申请完成了。
这是代码:
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged (WebView webview, int newProgress) {
super.onProgressChanged(webview,newProgress);
if(webview.equals(w1) && newProgress == 100 && webview.getUrl().startsWith("https://ssl.facebook.com/login.php")) {
webview.setVisibility(WebView.VISIBLE);
ImageView imageview = (ImageView)findViewById(R.id.ivsplash);
imageview.setVisibility(ImageView.GONE);
ProgressBar progressbar = (ProgressBar)findViewById(R.id.pbsplash);
progressbar.setVisibility(ProgressBar.GONE);
}
}
}
我这样做是为了避免 webview 需要三或四秒来呈现页面,但它不起作用。我之前使用的代码是:
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
super.shouldOverrideUrlLoading(webview, url);
webview.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView webview, String url) {
if(url.startsWith("https://ssl.facebook.com/login.php")) {
webview.setVisibility(WebView.VISIBLE);
ImageView imageview = (ImageView)findViewById(R.id.ivsplash);
imageview.setVisibility(ImageView.GONE);
ProgressBar progressbar = (ProgressBar)findViewById(R.id.pbsplash);
progressbar.setVisibility(ProgressBar.GONE);
}
}
}
最佳答案
不确定 WebChromeClient
是否可行,但我可以使用
WebViewClient
和重载 onLoadResource
、onReceivedError
和 onPageFinished
这是我做的
onLoadResource
mwebview.setVisibility(View.GONE);
onReceivedError
mwebview.setVisibility(View.VISIBLE);
onPageFinished
mwebview.setVisibility(View.VISIBLE);
最初在 XML 中,webview 被设置为 GONE
android:visibility="gone"
我也在 Facebook 上使用它并且工作正常。
关于android - WebView.getUrl() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3179212/