为了账号安全,请及时绑定邮箱和手机立即绑定

不懂啊!!

	private void init() {
		webView = (WebView) findViewById(R.id.web);
		webView.loadUrl(url);
		/*
		webView.setWebViewClient(new WebViewClient() {
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				return super.shouldOverrideUrlLoading(view, url);
			}
		});
		*/
		WebSettings settings = webView.getSettings();
		settings.setJavaScriptEnabled(true);
	}

init这么写会使用浏览器,但把注释去掉后就直接在WebView中加载了

为什么调用父类的函数会出现不同的结果??

正在回答

1 回答

shouldOverrideUrlLoading在api上的描述如下:

public boolean shouldOverrideUrlLoading (WebView view, String url)

Give the host application a chance to take over the control when a > new url is about to be loaded in the current WebView. 

If WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the url. 
If WebViewClient is provided, return true means the host application handles the url, while return false means the current WebView handles the url. This method is not called for requests using the POST "method".

Parameters

view : The WebView that is initiating the callback.

url  : The url to be loaded.

Returns True if the host application wants to leave the current WebView and handle the url itself, otherwise return false.    

翻译一下,三种情况:

若没有设置 WebViewClient 则在点击链接之后由系统处理该 url(通常是将点击事件作为intent对象发给系统),系统使用浏览器打开或弹出浏览器选择对话框。

若设置 WebViewClient 且该方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理。

若设置 WebViewClient 且该方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。

很明显,注释后由系统处理,系统调用了浏览器,取消注释调用父类方法时,父类方法的源码如下:

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

mRedirectCount++;

mRedirectUrl = url;

view.loadUrl(url);

return true;

}

最后返回的是true,即不跳转到外部浏览器


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第二门课(第1季)
  • 参与学习       111162    人
  • 解答问题       1457    个

本课程由浅入深地带您学会Android的常用控件的开发和使用

进入课程

不懂啊!!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信