Java 开发人员站点相互矛盾,认为webview应该覆盖

Java 开发人员站点相互矛盾,认为webview应该覆盖,java,android,webview,Java,Android,Webview,很多Android开发者都实现了自己的webview。 虽然在stackoverflow上讨论了许多与此主题相关的问题,但这可能是造成这种不清晰的原因之一 要在WebView中打开链接,android开发者需要定义自己的WebView 根据返回的false在shouldloverride中,应使用在当前Web视图中打开url。 (“当前”是指可能最近创建或使用的?) 根据和各种博客: public boolean shouldOverrideUrlLoading(WebView view, S

很多Android开发者都实现了自己的webview。 虽然在stackoverflow上讨论了许多与此主题相关的问题,但这可能是造成这种不清晰的原因之一

要在WebView中打开链接,android开发者需要定义自己的WebView

  • 根据返回的
    false
    shouldloverride中,应使用
    在当前Web视图中打开url。 (“当前”是指可能最近创建或使用的?)

  • 根据和各种博客:

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
       view.loadUrl(url);
       return true;
    }
    
    true
    必须返回给我

某个开发人员站点中是否存在错误?API级别之间是否存在差异? 什么是最干净和最好的使用shouldOverrideUrlLoading?


回答将有助于我们的团队和许多其他使用android WebView的开发人员。谢谢。

为了在当前WebView(而不是浏览器)中打开链接,您应该返回false,如下所示:

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

            return false;  

        }
    });

只要实现setWebViewClient(..),my answer和AxSample就会做同样的事情。另一方面,如果您不实施,浏览器将启动Instad。

如果您决定实施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时,它都会要求活动管理器找到合适的应用程序来加载URL(通常是设备中安装的web浏览器)

WebViewClient的默认实现应该覆盖以下内容

public boolean shouldOverrideUrlLoading(WebView view, String url)
{
  return false;
}
所以如果你写下这样的东西

webView.setWebViewClient(new WebViewClient());
URL将加载到您自己的WebView中,而不是外部web浏览器中

当您想修改URL,然后用另一个
loadUrl
调用加载新URL时,或者当您只是想避免加载URL并以不同的方式处理请求时,通常会在shouldOverrideUrlLoading中返回
true

你例子中的行为

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

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

因为您告诉WebView避免处理URL加载(
return true
),但您也使用
view.loadUrl(URL)
发出另一个请求,所以实际上您最终加载了URL。

谢谢,但是在developer.android.com/resources/tutorials/views/…还有一个自定义WebViewClient,返回true,以便加载当前WebView而不是浏览器。目前尚不清楚使用
视图是
返回false
还是
返回true
。应使用load
打开当前Web视图中的链接。非常感谢您的回答。这确实澄清了问题。伟大的