Пустой экран Android на onBack в loadDataWithBaseURL - PullRequest
9 голосов
/ 23 января 2012

Возможно, у него будет простое решение, но я читал здесь много тем, но никак. В ListView, если я коснусь строки, откроется новая активность. В этом упражнении я создаю httpget и создаю html-строку с тем, что мне нужно из этого httpget (часть найденной веб-страницы).

Так что я просто делаю loadDataWithBaseURL("http://base_path.com/", html, mime, encoding, null).

Работает как положено, и я просматриваю веб-страницу со ссылками и изображениями. Теперь возникают проблемы ... Если я нажимаю на изображение, я вижу большое изображение в этих окнах, но как только я нажимаю "назад" на телефоне, я вижу белую страницу. Я знаю, что это вызвано "нулевым" аргументом, но ... что я должен поставить, чтобы снова увидеть страницу html? Я попытался поставить "HTML" вместо NULL, но я вижу HTML-код внутри веб-просмотра!

Это мой onKeyDown, чтобы переопределить кнопку возврата:

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

Ответы [ 4 ]

7 голосов
/ 08 марта 2012

Я нашел некоторую информацию в этом ответе: Android: метод WebView goBack () показывает пустую страницу

Вам необходимо указать URL-адрес, на который можно вернуться при вызове

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

Вы передаете null, поэтому по умолчанию используется значение about: blank.Попробуйте вместо этого:

String baseUrl = "http://base_path.com/";
loadDataWithBaseURL(baseUrl, html, mime, encoding, baseUrl + filename);
1 голос
/ 13 ноября 2014

Как упомянул Gadgeteer, передача нуля на loadDataWithBaseURL() добавит 'about:blank' в стек истории веб-просмотров.

Чтобы избежать этой проблемы, я очищаю историю веб-просмотров, как только звоню loadDataWithBaseURL(), вызывая

webview.clearHistory()

согласно документу

public void clearHistory ()

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

Если вы вызываете clearHistory () после вызова loadDataWithBaseURL (), веб-просмотр не возвращается на пустую страницу и canGoBack() также возвращает false; потому что в веб-представлении нет стека назад после clearHistory ()

1 голос
/ 24 января 2012

В качестве обходного пути я сделал следующие действия:

  1. удалил функцию onKeyDown
  2. удалил myWebView.setWebViewClient (new WebViewClient ());

Таким образом, изображение загружается в браузер Android по умолчанию, и я могу закрыть его с помощью кнопки «назад».

Нелегко выходить за пределы WebView, но у меня не было другого выбора.

1 голос
/ 23 января 2012

Попробуйте это:

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

вместо loadDataWithBaseURL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...