2013-10-17 3 views
15

私はAndroidにwebViewを持っており、その中にhtml Webページを開きます。しかし、それはリンクと画像がいっぱいです。それらの1つをクリックすると、私のwebviewに読み込まれます。私はこの動作を無効にしたいので、リンクをクリックすると、リンクが読み込まれません。私はこれを試してみたsolutionとmyselftのために少し編集したが、働いていない。 私のwebviewclientコード:WebViewの他のページに移動せず、リンクと参照を無効にします。

private boolean loaded = false; 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    if(loaded == false){ 
     view.loadUrl(url); 
     loaded = true; 
     return true; 
    }else{ 
     return false; 
    } 

} 

My webviewの実装と設定。

WebView wv = (WebView) findViewById(R.id.recipeWv); 
    ourWebViewClient webViewClient = new ourWebViewClient(); 
    webViewClient.shouldOverrideUrlLoading(wv, URLsave); 
    wv.setWebViewClient(webViewClient); 
    wv.setFocusableInTouchMode(false); 
    wv.setFocusable(false); 
    wv.setClickable(false); 
    WebSettings settings = wv.getSettings(); 
    settings.setDefaultTextEncodingName("utf-8"); 

    settings.setLoadWithOverviewMode(true); 
    settings.setBuiltInZoomControls(true); 

例:(「質問」など)のリンクのいずれかに私のWebViewでユーザーオープンStackOverflowのホームページやクリックは、WebViewがStackOverflowのホームページにとどまる必要がある場合。

答えて

18

のような追加のクラスMyWebViewClientを追加する必要が

+0

それは優れた作品です! – Dandelion

4

あなたが別のウィンドウでウェブページの内部リンクを開きたい場合は、

は使用しないでください方法は、開口部の世話をしている

WebView webView;//Your WebView Object 
webView.setWebViewClient(new HelpClient());// Comment this line 

B'coz setWebViewClient()同じWebビューの新しいページ。だから、この行を簡単にコメントしてください。

private class HelpClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().equals("www.example.com")) { 
      // This is my web site, so do not override; let my WebView load the page 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
} 

これはうまくいきます。あなたはSO-

webview.loadUrl(url); 
webview.setWebViewClient(new MyWebViewClient()); 

のように、コードの余分な行を追加し、クラス変数にあなたの現在のURLを保存する必要がありthis-

/* Class for webview client */ 
class MyWebViewClient extends WebViewClient { 

// show the web page in webview but not in web browser 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    view.loadUrl(url); 

    return true; 
} 

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
} 

@Override 
public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    super.onPageStarted(view, url, favicon); 
} 

@Override 
public void onLoadResource(WebView view, String url) { 
    super.onLoadResource(view, url); 

} 

} 
+0

からtrueを返します。したがって、参照とリンクを無効にするのと同様です。 – Dandelion

+0

@Dandelionあなたは資産から静的なHTMLページを読み込んでいますか、それともURLですか? –

+0

URLです。私はListViewで多くの参照を持っていて、ユーザーがそれらのうちの1つをクリックすると、Webviewで開かれています。 – Dandelion

1

ロードされたものと同じかどうかを確認してください。ユーザがリンクをクリックすると、shouldOverrideUrlLoadingが呼び出され、ウェブサイトをチェックします。このような 何か:

private String currentUrl; 

public ourWebViewClient(String currentUrl) { 
    this.currentUrl = currentUrl; 
} 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.equals(currentUrl)) { 
     view.loadUrl(url); 
    } 
    return true; 
} 

重要:は、あなたのWebViewWebViewClientを設定することを忘れないでください。

ourWebViewClient webViewClient = new ourWebViewClient(urlToLoad); 
wv.setWebViewClient(webViewClient); 
+0

はい私はそれを使用して、私は実装に私の質問を更新します。 – Dandelion

+1

私は自分の答えを更新しました。これは私のためにうまくいくようです。それが役に立てば幸い。 – Anirudh

+0

私はあなたの更新された答えを試しましたが、URLはまだ動作します:/ – Dandelion

8

WebViewClientを実装し、ちょうど私が同じに滞在、他のページに移動したくないのWebViewクライアントのこの方法

webView.setWebViewClient(new WebViewClient(){ 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return true; 
    } 
}); 
+1

コンテンツに含まれるURLをWebビューで開くことを停止または防止する最も正しい方法。 **** ---その停止のために - **** –

関連する問題