Вести историю навигации в WebView - PullRequest
1 голос
/ 04 апреля 2019

В моем приложении есть основной вид деятельности и детский. Действие на основное действие открывает дочернее действие. Каждое дочернее действие загружает веб-страницу с различными URL-адресами, указывающими на расположение серверов. Я могу перейти ко всем URL, но когда я нажимаю назад, я не перенаправлен на предыдущую страницу. Вместо этого он существует и подводит меня к основной деятельности. Действие кнопки «Назад» должно перейти к последнему URL-адресу. Как это сделать?

1 Ответ

1 голос
/ 04 апреля 2019

Вам необходимо добавить каждый URL в объект List, а затем использовать этот объект для перехода назад.

private LinkedList<String> navigationHistory;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    mWebView.setWebViewClient(new MyWebViewClient());
    ....
}

@Override
public void onBackPressed() {
    if (navigationHistory.size() > 0) // Check if the url is empty
    {
        navigationHistory.removeLast(); // Remove the last url

        if (navigationHistory.size() > 0) {
            // Load the last page
            mWebView.loadUrl(navigationHistory.getLast());
        } else {
            super.onBackPressed();
        }
    } else {
            super.onBackPressed();
    }
}

private class MyWebViewClient extends WebViewClient {
    @Override
    public void onPageFinished(WebView view, String url) {
        if (!navigationHistory.contains(url)) // Check for duplicate urls
            navigationHistory.add(url); // add each loading url to List
        super.onPageFinished(view, url);
    }
}
...