2012-01-23 4 views
9

Probabilmente avrà una soluzione semplice, ma ho letto molti thread qui ma in nessun modo. In una ListView, se tocco su una riga apre una nuova attività. In quell'attività faccio un httpget e creo una stringa html con quello che mi serve da quel httpget (una parte della pagina web recuperata).Schermo vuoto Android onBack in a loadDataWithBaseURL

Quindi faccio semplicemente un loadDataWithBaseURL("http://base_path.com/", html, mime, encoding, null).

Funziona come previsto e visualizzo la pagina Web con collegamenti e immagini. Ora i problemi arrivano ... Se tocco un'immagine, vedo l'immagine grande in quella finestra ma una volta premuto il tasto "indietro" sul telefono vedo una pagina bianca. So che è causato dall'argomento "null" ma ... cosa dovrei fare per vedere di nuovo la pagina html? Ho provato a mettere "html" invece di null ma vedo il codice html all'interno della webview!

Questo è il mio onKeyDown per ignorare il pulsante indietro:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the BACK key and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
     webView.goBack(); 
     return true; 
    } 
    // If it wasn't the BACK key or there's no web page history, bubble up to the default 
    // system behavior (probably exit the activity) 
    return super.onKeyDown(keyCode, event); 
} 

risposta

1

Per risolvere il problema ho fatto le seguenti attività.

  1. rimosso la funzione onKeyDown
  2. rimosso il myWebView.setWebViewClient (nuovo WebViewClient());

In questo modo l'immagine viene caricata nel browser Android predefinito e posso chiuderla con il pulsante Indietro.

Non va bene uscire dalla WebView ma non ho avuto altra scelta.

+0

Risposta non correlata alla domanda. È una soluzione per le tue esigenze specifiche, ma non una risposta alla tua domanda. –

1

Prova questa:

webview.loadUrl("file:///android_asset/your_html.html"); 

al posto del tuo loadDataWithBaseURL

+0

quindi devo memorizzare il mio "String html" in un file e caricarlo da (per esempio) la scheda SD? – Vale

+0

nah, basta usare un URL. Non intendevo mettere il file: //. Puoi semplicemente fare http://whatevertheURLis.com/whatever – volk

+0

lo so :) ma ho creato la stringa html perché analizzo HTTPGET e recupero solo la parte della pagina web di cui ho bisogno ... ecco perché ho bisogno di usare the loadDataWithBaseURL. L'unico problema è che se tocco un link all'interno della pagina web e preme il tasto indietro ho bisogno di tornare sulla pagina loadDataWithBaseURL, ma invece vedo una pagina bianca. Grazie molto. – Vale

7

ho trovato alcune informazioni su questa risposta: Android: WebView's method goBack() shows a blank page

è necessario fornire un URL per eseguire in quando si chiama

loadDataWithBaseURL("http://base_path.com/", html, mime, encoding, null); 

Si passa nulla in modo di default per 'about: blank'. Prova a modificare:

String baseUrl = "http://base_path.com/"; 
loadDataWithBaseURL(baseUrl, html, mime, encoding, baseUrl + filename); 
+0

Vorrei +100 voi –

+0

Sei un risparmiatore di vita! Ricordo di aver letto questo nei documenti molto tempo fa e tuttavia sono riuscito a rimanere frustrato per molte ore. Finalmente ho avuto un momento di lampadina leggendo la tua risposta. – goat

1

Come accennato Gadgeteer passando null sulla loadDataWithBaseURL() aggiungerà il 'about:blank' nella pila della storia WebView.

Per evitare questo problema, ho cancellare la cronologia visualizzazione web non appena chiamo loadDataWithBaseURL() chiamando

webview.clearHistory() 

come da documento

clearHistory public void()

Tells this WebView to clear its internal back/forward list. 

Se chiami clearHistory() dopo aver chiamato loadDataWithBaseURL() la webview non torna alla pagina vuota e canGoBack() restituisce anche false; perché non ci sono back stack nella webview dopo clearHistory()

+0

non funziona. ancora vai alla pagina bianca. – neobie