首页 > 解决方案 > 在 WebView 中维护导航历史

问题描述

在我的应用程序中,我有主要活动和子活动。对主要活动的操作会打开一个子活动。每个子活动加载具有各种 url 都指向服务器位置的网页。我可以导航到所有的网址,但是当我按下返回时,我没有被重定向到上一页。相反,它存在并将我带到主要活动中。后退按钮操作应导航到最后一个 url 位置。怎么做?

标签: android-webview

解决方案


您需要将每个 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);
    }
}

推荐阅读