android-有没有像wv.canGoBack()那样跟踪webview历史的方法?

android-有没有像wv.canGoBack()那样跟踪webview历史的方法?,android,webview,Android,Webview,有没有办法让我拥有自己的webview历史堆栈 我觉得webview.canGoBack()类似于stack.peek(),而webview.goBack()类似于stack.pop()。我想有一种方法来创建我自己的堆栈来保存webview历史记录,因为我想根据当前正在查看的页面向堆栈添加其他信息,并且该堆栈可能具有非url字符串。这就是为什么我想创建自己的自定义堆栈,而不是使用本机方法 我试图创建一个堆栈,并在调用onPageStarted时添加一段信息。然后我意识到有几个重定向会导致onPa

有没有办法让我拥有自己的webview历史堆栈

我觉得
webview.canGoBack()
类似于
stack.peek()
,而
webview.goBack()
类似于
stack.pop()
。我想有一种方法来创建我自己的堆栈来保存webview历史记录,因为我想根据当前正在查看的页面向堆栈添加其他信息,并且该堆栈可能具有非url字符串。这就是为什么我想创建自己的自定义堆栈,而不是使用本机方法

我试图创建一个
堆栈
,并在调用
onPageStarted
时添加一段信息。然后我意识到有几个重定向会导致
onPageStarted
在一个页面内被调用多次

假设我从pageA->pageB->pageC开始。有1个重定向发生在pageA上,2个重定向发生在pageB上。将要发生的是:

通过使用
webview.goBack()
,我的页面从pageC->pageB->pageA进入。这正是我想要的行为

但是当使用我的自定义堆栈时,我的页面从pageC->pageB->pageB->pageB->pageA->pageA转到pageA

是否有一种方法可以创建一个自定义堆栈,该堆栈的行为与
webview.goBack()
相同


谢谢你的帮助

您需要做的是重写被调用的WebViewClient函数 在加载新url之前,允许您查看其值。然后,您的实现可以存储所有访问的URL:

ArrayList<String> visitedUrlStack = new ArrayList<String>();

 webview.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
              visitedUrlStack.add(url);
              return false; // continue with loading of url!!
         }
});
ArrayList visitedUrlStack=new ArrayList();
setWebViewClient(新的WebViewClient(){
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
visitedUrlStack.add(url);
返回false;//继续加载url!!
}
});

您可以在程序中的任何位置查询visitedUrlStack,以获取已访问URL的列表


重要的是,shouldOverrideUrlLoading()的实现将返回false。这意味着
到webview,它可以继续加载url。

我尝试了
onPageStarted
onPageFinished
应该重写url
。根据页面上发生的重定向数量,这三个重定向都会被多次调用。可能重定向没有添加到webview堆栈中。只有点击页面才算?