gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:22 25 4
gpt4 key购买 nike

我的应用程序中有一个 WebView,它显示从网页下载的 HTML 数据。为什么我加载 HTML 而不是单独加载 URL?嗯,为了允许离线搜索,我下载了 HTML 数据并将其存储在 SQL 数据库中。

一切正常,随后对 loadDataWithBaseUrl() 的调用也正常,并继续在我的 WebView 上正确加载,但是每当用户按下后退键时,用户只是回到堆栈上的最后一个 Activity ,而不是返回。

我尝试使用以下代码:

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

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

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

但什么也没有发生,它只是停留在同一个地方。

仅供引用,我尝试在调用 loadData() 时传递 null 和一个实际的 URL,这是我现在的设置方式:

view.loadDataWithBaseURL(mUrl, mHtmlData, SearchUtils.MIME_TYPE, SearchUtils.CHARSET, "");

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

最佳答案

所以我实际上决定实现我自己的“后退”功能,不确定这是否符合每个人的 Intent ,但它对我有用。

首先,

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

private ArrayList<String> searchHistory;

onCreate() 初始化它:

searchHistory = new ArrayList<String>();

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

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

并且,当用户按回键时,通过删除数组中最老的条目来处理该问题,然后加载删除后剩下的最后一个条目:

@Override
public 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() 时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com