我的应用程序中有WebView
,显示从网页下载的HTML数据。为什么我只加载HTML而不是URL?好吧,为了让我允许离线搜索,我下载HTML数据并将其存储在SQL数据库中。
一切运作良好,随后对loadDataWithBaseUrl()
的调用运行良好,并继续正确加载到我的WebView
,但每当用户按下后退键时,用户只会被带回到最后堆栈上的活动,而不是回去。
我尝试使用以下代码:
// 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;
}
但没有任何反应,只是停留在同一个地方。
作为一个仅供参考,我在调用null
时尝试传递loadData()
和实际网址,以下是我现在设置的方式:
view.loadDataWithBaseURL(mUrl, mHtmlData, SearchUtils.MIME_TYPE, SearchUtils.CHARSET, "");
我读了这个answer,但我希望能有更好的运气。
答案 0 :(得分:5)
所以我实际上决定实现我自己的“后退”功能,不确定这是否适用于每个人的意图,但它对我有用。
首先,
创建一个ArrayList
,它将按时间顺序存储您访问的网址。
private ArrayList<String> searchHistory;
来自onCreate()
初始化它:
searchHistory = new ArrayList<String>();
现在,每次加载网址时,只需将网址字符串添加到历史记录中:
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数据。
希望有所帮助!
答案 1 :(得分:1)
另一个简单的解决方案是保存第一个网址,然后检查是否等于当前网址
字段:
String mFirstUrlLoaded = "";
比:
mFirstUrlLoaded = "your first url.....";
比:
@Override
public void onBackPressed() {
if (!mFirstUrlLoaded.equals(mWebView.getUrl())) {
mWebView.goBack();
}
答案 2 :(得分:1)
在历史字段中添加第一个链接
view.loadDataWithBaseURL(mUrl, mHtmlData, SearchUtils.MIME_TYPE, SearchUtils.CHARSET, mUrl);
答案 3 :(得分:0)
String mFirstUrlLoaded = "";
mFirstUrlLoaded = "your first url.....";
@Override
public void onBackPressed() {
if (!mFirstUrlLoaded.equals(mWebView.getUrl())) {
mWebView.goBack();
}
这对我有用..