开发者网站互相矛盾,互相依赖webview-shouldOverrideUrlLoading

时间:2012-06-02 20:40:59

标签: java android webview

很多Android开发者都实现了自己的webview。 虽然在stackoverflow上讨论了很多与此主题相关的问题,但这可能是导致这种不明确的原因。

要在WebView中打开链接,android开发人员会定义自己的webview。

其中一个开发者网站是否有错误?它有API级别的区别吗? shouldOverrideUrlLoading最干净,最好用的是什么?

答案可以帮助我们的团队和许多其他开发人员使用android webviews.Thanks。

3 个答案:

答案 0 :(得分:3)

如果您决定实施 WebViewClient

webView.setWebViewClient(new WebViewClient()
{
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url)
  {
    // My own condition to decide if I should skip URL loading
    boolean avoidURLLoading = ...

    if (avoidURLLoading)
    {
      // Ask the WebView to avoid loading the URL,
      // I want to manage this case on my own.
      return true;
    }
    else
    {
      // Let the WebView load the URL 
      return false;
    }
  };
});

如果您没有实施 WebViewClient ,每次您要求 WebView 使用loadUrl方法加载网址时,它会询问活动管理器找到一个合适的应用程序来加载URL(通常是设备中安装的Web浏览器)。

WebViewClient shouldOverrideUrlLoading 的默认实施是

public boolean shouldOverrideUrlLoading(WebView view, String url)
{
  return false;
}

所以,如果你只是写这样的东西

webView.setWebViewClient(new WebViewClient());

网址将加载到您自己的 WebView 中,而不是在外部网络浏览器中。

如果您想要修改网址,然后通过另一个true来电加载新网址,或者您只是想避免,则通常会在 shouldOverrideUrlLoading 中返回loadUrl加载URL并以不同的方式处理请求。

示例中的行为

public boolean shouldOverrideUrlLoading(WebView view, String url)
{
  view.loadUrl(url);
  return true;
}

相当于

public boolean shouldOverrideUrlLoading(WebView view, String url)
{
  return false;
}

因为您告诉 WebView 以避免处理网址加载(return true),但您还要使用view.loadUrl(url)发出另一个请求,所以实际上你结束了加载网址。

答案 1 :(得分:0)

为了打开当前WebView(不是浏览器)中的链接,你应该像这样返回false:

mWebView.setWebViewClient(new WebViewClient(){
        public boolean shouldOverrideUrlLoading(WebView view, String url){

            return false;  

        }
    });

答案 2 :(得分:0)

只要你实现setWebViewClient(..)我的答案和axample做同样的事情。另一方面,如果你没有实现它,浏览器将启动instaed。