Android WebView:导航到Url哈希,无需使用goBackOrForward重新加载

Android WebView:导航到Url哈希,无需使用goBackOrForward重新加载,android,android-webview,Android,Android Webview,我想在不重新加载网页的情况下导航单页应用程序。单击按钮,我调用以下代码进行导航 String fullUrl = "https://example.com/page1"; String hashUrl = "/page1"; public void goBackInWebView(String fullUrl, String hashUrl) { WebBackForwardList history = webview.copyBackForwa

我想在不重新加载网页的情况下导航单页应用程序。单击按钮,我调用以下代码进行导航

String fullUrl = "https://example.com/page1";
String hashUrl = "/page1";

public void goBackInWebView(String fullUrl, String hashUrl) {
    WebBackForwardList history = webview.copyBackForwardList();
    int index;
    int currentIndex = history.getCurrentIndex();
    for (int i = 0; i < history.getSize(); i++) {
        index = i - currentIndex;
        if ((webview.canGoBackOrForward(1 + i)) || (webview.canGoBackOrForward(1 - i))) {
            if (history.getItemAtIndex(i).getUrl().endsWith(hashUrl)) {
                webview.goBackOrForward(index);
                break;
            } else if (i == history.getSize()) {

                webview.loadUrl(fullUrl);
                break;
            }

        } else {
            //OUTER ELSE
            webview.loadUrl(fullUrl);
            break;
        }
    }
}
String fullUrl=”https://example.com/page1";
字符串hashUrl=“/page1”;
public void goBackInWebView(字符串fullUrl、字符串hashUrl){
WebBackForwardList history=webview.copyBackForwardList();
整数指数;
int currentIndex=history.getCurrentIndex();
for(int i=0;i
如果网页未保存在历史记录中,它将调用
webview.loadUrl(fullUrl)
否则它将使用
webview.goBackOrForward(索引)加载页面


但是每次外部调用时都在代码上方。

首先,canGoBackOrForward用于获取页面是否可以返回或前进给定数量的步骤。正如您在问题中提到的,您的web页面是单页的,所以您不需要调用此方法。我认为下面的代码可以解决您的问题

public void goBackInWebView(String fullUrl, String hashUrl) {

        WebBackForwardList history = webview.copyBackForwardList();

        if (history.getSize() == 0) {
            webview.loadUrl(fullUrl);
        }else {
            for (int i = 0; i < history.getSize(); i++) {

                if (history.getItemAtIndex(i).getUrl().endsWith(hashUrl)) {
                    webview.goBackOrForward(i);
                    break;
                } else {
                    webview.loadUrl(fullUrl);
                }


            }
        }
    }
public void goBackInWebView(字符串fullUrl,字符串hashUrl){
WebBackForwardList history=webview.copyBackForwardList();
if(history.getSize()==0){
loadUrl(fullUrl);
}否则{
for(int i=0;i
我发现很难看出Android和WebView有多大关系,因为问题是SPA

最好使用SPA导航,因为这不会请求服务器端的任何内容。
要点很简单,后退按钮一点也不重要,但永远不会导航。

您只需要绑定JavaScript,只要
window.location.hash
发生更改,它就会运行。

您需要做的是创建一个WebViewFragment,它接受您的前向url并打开(加载)它。每次有新的正向URL时,通过截取shouldOverrideUrl附加一个新的片段,并在后退时只需弹出片段。:)这样,您还可以将动画从一个页面修改到另一个页面。你会更好地掌握你的网页。