2

多くのAndroid開発者は、独自のWebビューを実装しています。このトピックに関連する多くの質問がstackoverflowで説明されていますが、これがおそらくこの明確さの欠如の原因です。

WebView内でリンクを開くために、Android開発者は独自のWebビューを定義します。

開発者サイトの1つに間違いがありますか?APIレベルに違いはありますか?shouldOverrideUrlLoadingの最もクリーンで最良の使用法は何ですか?

答えは私たちのチームとAndroidのウェブビューで作業している他の多くの開発者を助けるでしょう。ありがとう。

4

3 に答える 3

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を実装しない場合、メソッドを使用してURLをロードするようにWebViewに要求するたびに、URLをロードするための適切なアプリ(通常はデバイスにインストールされているWebブラウザー)を見つけるようにActivityManagerに要求します。loadUrl

WebViewClientでのshouldOverrideUrlLoadingのデフォルトの実装は次のとおりです。

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

だからあなたがこのようなものを書くだけなら

webView.setWebViewClient(new WebViewClient());

URLは、外部のWebブラウザーではなく、独自のWebView内にロードされます。

通常、URLを変更してから別の呼び出しで新しいURLをロードする場合、またはURLのロードを避けて別の方法でリクエストを処理する場合trueは、shouldOverrideUrlLoadingに戻ります。loadUrl

あなたの例の振る舞い

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をロードすることになります。

于 2012-06-03T00:04:27.647 に答える
0

現在のWebView(ブラウザではない)でリンクを開くには、次のようにfalseを返す必要があります。

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

            return false;  

        }
    });
于 2012-06-02T20:56:37.577 に答える
0

setWebViewClient(..)を実装している限り、私の答えと例は同じことをします。一方、それを実装しない場合、ブラウザはインストールを開始します。

于 2012-06-02T21:45:35.977 に答える