2013-10-17 7 views
15

Ho una visualizzazione Web in Android e apro una pagina Web html. Ma è pieno di link e immagini, e quando clicco su uno di essi, si carica nella mia webview. Voglio disabilitare questo comportamento, quindi se faccio clic su un link, non caricarlo. Ho provato questo solution e modificato un po 'per myselft, ma non ha funzionato. Il mio codice webviewclient:Non passare ad altre pagine in WebView, disabilitare collegamenti e riferimenti

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; 
    } 

} 

mia implementazione WebView e le impostazioni.

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); 

Esempio: se l'utente aperta nel mio WebView homepage StackOverflow e fa clic su uno dei link (come "domande") allora il WebView dovrebbe rimanere sulla home page StackOverflow.

risposta

18

È necessario salvare in una variabile di classe l'URL corrente e controlla se è lo stesso con quello caricato. Quando l'utente fa clic su un collegamento, viene chiamato lo shouldOverrideUrlLoading e controlla il sito Web. Qualcosa di simile a questo:

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; 
} 

Importante: non dimenticare impostare il WebViewClient al WebView.

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

Funziona, eccellente! – Dandelion

4

Se si vuole aprire il collegamento interno di una pagina web nella finestra differente allora

Non utilizzare

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

b'coz setWebViewClient() metodo si prende cura di apertura una nuova pagina nella stessa webview. Così semplice commentare questa frase.

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; 
    } 
} 

Spero che funzioni.

+0

Non voglio per navigare ad altre pagine, rimanere sulla stessa. Quindi, come disabilitare i riferimenti e i collegamenti. – Dandelion

+0

@Dandelion stai caricando la pagina html statica dalle risorse o è un URL? –

+0

È un URL. Ho molti riferimenti in un ListView e quando l'utente fa clic su uno di essi, è aperto in una visualizzazione Web. – Dandelion

1

è necessario aggiungere una riga aggiuntiva di codice, come cd

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

E aggiungere un MyWebViewClient classe aggiuntiva come questo-

/* 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

Sì, lo uso, aggiornerò la mia domanda con l'implementazione. – Dandelion

+1

Ho aggiornato la mia risposta. Questo sembra funzionare bene per me. Spero che sia d'aiuto. – Anirudh

+0

Ho provato la tua risposta aggiornata ma gli URL funzionano ancora:/ – Dandelion

8

implementare un WebViewClient e Just ritorno vero da questo metodo di WebView client

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

il modo più corretto per fermare/impedire a webview di aprire qualsiasi URL contenuto nel contenuto. **** --- E 'solo per fermarsi-- **** –

Problemi correlati