2012-01-23 17 views
9

Prawdopodobnie będzie to proste rozwiązanie, ale przeczytałem wiele wątków tutaj, ale nie ma mowy. W widoku listy, jeśli stuknę w wiersz, otwiera on nową aktywność. W tym działaniu utworzę httpget i utworzę ciąg html z tym, czego potrzebuję z tego httpget (część strony internetowej pobranej).Android pusty ekran onBack w loadDataWithBaseURL

Po prostu wykonuję loadDataWithBaseURL("http://base_path.com/", html, mime, encoding, null).

Działa zgodnie z oczekiwaniami i przeglądam stronę z linkami i obrazami. Teraz pojawiają się problemy ... Jeśli stukam w obraz, widzę duży obraz w tym oknie, ale gdy klikam "wstecz" w telefonie, widzę białą stronę. Wiem, że jest to spowodowane argumentem "null", ale ... co powinienem umieścić, aby ponownie wyświetlić stronę html? Próbowałem wstawić "html" zamiast null, ale widzę kod HTML wewnątrz widoku webowego!

To mój onKeyDown zastąpić tylną przycisk:

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

Odpowiedz

1

Jako obejście zrobiłem następujące czynności.

  1. usunięto onkeydown funkcji
  2. Usunięto myWebView.setWebViewClient (New WebViewClient());

W ten sposób obraz jest ładowany w domyślnej przeglądarce systemu Android i można go zamknąć za pomocą przycisku Wstecz.

Nie jest dobrze wyjść poza WebView, ale nie miałem innego wyboru.

+0

Odpowiedź niezwiązana z pytaniem. Jest to obejście Twoich konkretnych potrzeb, ale nie jest to odpowiedź na twoje pytanie. –

1

Spróbuj tego:

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

zamiast swojego loadDataWithBaseURL

+0

, więc muszę przechowywać mój "String html" w pliku i załadować go z (na przykład) karty SD? – Vale

+0

nah, po prostu użyj adresu URL. Nie chciałem umieścić pliku: //. Możesz po prostu zrobić http://whatevertheURLis.com/whatever – volk

+0

Wiem :), ale zrobiłem ciąg html ponieważ parsuję HTTPGET i pobieram tylko część strony potrzebuję ... właśnie dlatego muszę użyć the loadDataWithBaseURL. Jedyny problem polega na tym, że jeśli stuknę w link na stronie internetowej i naciskam na klawisz powrotu, muszę powrócić na stronę loadDataWithBaseURL, ale zamiast tego widzę białą stronę. Wielkie dzięki. – Vale

7

znalazłem pewne informacje na ten odpowiedź: Android: WebView's method goBack() shows a blank page

należy podać adres URL do z powrotem do kiedy zadzwonić

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

są przechodzącą zerowy więc domyślne do „about: blank”. Spróbuj to zamiast:

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

Chciałbym +100 Ci –

+0

Jesteś ratownikiem! Pamiętam, że czytałem to w dokumentach dawno temu, a mimo to udało mi się zostać sfrustrowanym przez wiele godzin. W końcu miałam chwilę żarówek na przeczytaniu twojej odpowiedzi. – goat

1

Jak Gadgeteer wspomniał przechodzącej wartość null na loadDataWithBaseURL() doda 'about:blank' do stosu Webview historii.

Aby uniknąć tego problemu, I wyczyść historię WebView jak najszybciej zadzwonić loadDataWithBaseURL() wywołując

webview.clearHistory() 

jak na dokumencie

public void clearhistory()

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

Wywołanie metody clearHistory() po wywołaniu loadDataWithBaseURL() powoduje, że webview nie wraca do pustej strony, a canGoBack() zwraca również false; ponieważ nie ma żadnego stosu wstecznego w widoku webowym po clearHistory()

+0

nie działa. nadal przejdź do pustej strony. – neobie

Powiązane problemy