我有一个android应用程序,它在一个带有WebView的活动中加载网页。我使用手动检索页面,并使用WebView的loadDataWithBaseURL将其显示在屏幕上。那里的一切都很好。
现在,我正在尝试重写Back按钮按下,以模拟回到WebView历史堆栈中。我能够重写后退按钮,我可以看到WebView中有一个历史堆栈,我可以看到历史url是正确的,但是当我调用WebView的goBack()方法时,它会显示一个空白页。
有没有人在此之前遇到过这种情况,或者给我几条建议,从这个角度出发?
编辑:如果我使用WebView的loadUrl方法,带有覆盖的Back按钮将按预期工作。但为什么..。如果我需要手动处理这个问题,我如何开始处理历史页面?
发布于 2017-04-01 18:19:43
我处理这一问题的方法是在使用loadDataWithBaseURL
加载根页面之后保留一个本地堆栈指针,指向加载的页面数。返回时,如果指针命中1,则处于根级,并使用loadDataWithBaseURL
重新加载根页面。
FYI,我在带有片段的活动中使用这段代码,因此片段实现了接口IBackButtonListener,它帮助我捕获主活动中的后退按钮,并将事件传播到当前片段。如果片段返回true,则意味着它已经处理了该事件。
IBackbuttonListener.java
public interface IBackButtonListener {
public boolean onBackButtonPressed();
}
实现IBackButtonListener并从html数据加载一个webview的片段。
private int historyStackPointer = 0;
...
@Override
public boolean onBackButtonPressed() {
boolean rtn = false;
if (webView.canGoBack()) {
if(historyStackPointer > 1) {
webView.goBack();
historyStackPointer--;
rtn = true;
}else{
if(historyStackPointer == 1) {
// Reload the html data
webView.loadDataWithBaseURL("file:///android_asset/", html_data, "text/html", "UTF-8", null);
historyStackPointer = 0;
rtn = true;
}else{
webView.loadUrl("about:blank");
rtn = false;
}
}
} else {
rtn = false;
}
return rtn;
}
html_data是一个带有页面html的字符串。
https://stackoverflow.com/questions/3574674
复制相似问题