android – webView.canGoBack()在使用loadDataWithBaseURL()时不起作用

android – webView.canGoBack()在使用loadDataWithBaseURL()时不起作用,第1张

概述我的应用程序中有一个WebView,它显示从网页下载的 HTML数据.为什么我只加载 HTML而不是URL?好吧,为了让我允许离线搜索,我下载HTML数据并将其存储在SQL数据库中. 一切运行良好,后续对loadDataWithBaseUrl()的调用运行良好,并继续在我的WebView上正确加载,但每当用户按下后退键时,用户只需回到堆栈上的最后一个活动,而不是返回. 我尝试使用以下代码: // 我的应用程序中有一个WebVIEw,它显示从网页下载的 HTML数据.为什么我只加载 HTML而不是URL?好吧,为了让我允许离线搜索,我下载HTML数据并将其存储在sql数据库中.

一切运行良好,后续对loadDataWithBaseUrl()的调用运行良好,并继续在我的WebVIEw上正确加载,但每当用户按下后退键时,用户只需回到堆栈上的最后一个活动,而不是返回.

我尝试使用以下代码:

// Check if the key event was the Back button and if there's historyif ((keyCode == KeyEvent.KEYCODE_BACK) && myWebVIEw.canGoBack()) {    myWebVIEw.goBack();    return true;}

但后来我尝试强制WebVIEw返回,而不检查是否可以,通过:

// Check if the key event was the Back button and if there's historyif ((keyCode == KeyEvent.KEYCODE_BACK)) {    myWebVIEw.goBack();    return true;}

但没有任何反应,只是停留在同一个地方.

作为一个FYI,我在调用loadData()时尝试传递null和一个实际的URL,这就是我现在设置它的方法:

vIEw.loadDataWithBaseURL(mUrl,mHTMLData,SearchUtils.MIME_TYPE,SearchUtils.CHARSET,"");

我读了这个answer,但我希望能有更好的运气.

解决方法 所以我实际上决定实现我自己的“后退”功能,不确定这是否适用于每个人的意图,但它对我有用.

第一,

创建一个ArrayList,它将按时间顺序存储您访问的URL.

private ArrayList<String> searchHistory;

从onCreate()初始化它:

searchHistory = new ArrayList<String>();

现在,每次加载网址时,只需将网址字符串添加到历史记录中:

String mUrl = "www.example.com";searchHistory.add(mUrl);mWebVIEw.loadDataWithBaseURL(mUrl,...);

并且,当用户按下时,通过删除数组的最旧条目来处理它,然后加载删除后剩下的最后一个:

@OverrIDepublic boolean onKeyDown(int keyCode,KeyEvent event) {         if ((keyCode == KeyEvent.KEYCODE_BACK) && searchHistoryPos > 0) {        Constants.LogMessage("Handling back keyevent");        //remove eldest entry        searchHistory.remove(mUrl);        //make the url-to-load be the latest entry after deletion        mUrl = searchHistory.get(searchHistory.size);        //load the new url        mWebVIEw.loadDataWithBaseURL(mUrl...);        }    }

当然,在调用loadDataWithBaseUrl时,我也传递了预加载的HTML数据.

希望有所帮助!

总结

以上是内存溢出为你收集整理的android – webView.canGoBack()在使用loadDataWithBaseURL()时不起作用全部内容,希望文章能够帮你解决android – webView.canGoBack()在使用loadDataWithBaseURL()时不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1121985.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存