webview的历史记录尚未清除......以下代码有什么问题?
网页视图制作
mWebViewReport=(WebView)findViewById(R.id.report_page);
mWebViewReport.setWebViewClient(new HelloWebViewClient());
mWebViewReport.getSettings().setBuiltInZoomControls(true);
单击帮助按钮时加载帮助文件
mWebViewReport.loadUrl("file:///android_asset/help.html");
mWebViewReport.clearHistory();
mWebViewReport.clearCache(true);
在摘要按钮单击
时加载摘要文件 mWebViewReport.loadUrl("file:///android_asset/summary.html");
//On back button click
if (mWebViewReport.canGoBack()) {
mWebViewReport.goBack();
return ;
}
在这里,我也可以看到帮助页面......
答案 0 :(得分:52)
您无法在webview加载页面(url)时清除历史记录,以便清除onPageFinished侦听器的历史记录设置,如下所示
在onCreate
之前声明一个public varboolean clearHistory = false;
现在宣布你的mWebViewReport设置了这个
mWebViewReport.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
if (clearHistory)
{
clearHistory = false;
mWebViewReport.clearHistory();
}
super.onPageFinished(view, url);
}
});
现在,当您打电话给您的帮助网址时,只需将clearHistory设置为true
即可清除历史记录mWebViewReport.loadUrl("file:///android_asset/help.html");
mWebViewReport.clearHistory(); // REMOVE THIS LINE
mWebViewReport.clearCache(true); // REMOVE THIS LINE
clearHistory = true; // ADD THIS LINE
答案 1 :(得分:9)
我认为,clearHistory()
会清除back and forward list
。因此,当前加载的URL仍将保留在后面的列表中。
答案 2 :(得分:5)
Osama_Almaani的解决方案非常好!您可以通过将标志移动到WebViewClient实现来优化代码。
在您的活动中定义一个字段,并使用此字段代替匿名声明:
private MyWebViewClient myWebViewClient = new MyWebViewClient();
...
myWebView.setWebViewClient(myWebViewClient);
使用新方法clearHistory()增强WebViewClient类:
private class MyWebViewClient extends WebViewClient {
private boolean clearHistory = false;
/**Use this instead of WebView.clearHistory(). */
public void clearHistory(){
clearHistory = true;
}
@Override
public void onPageFinished(WebView view, String url) {
if(clearHistory){
Log.d(TAG, "clearHistory now");
clearHistory = false;
myWebView.clearHistory();
}
super.onPageFinished(view, url);
}
}
现在您可以使用这种新方法:
myWebViewClient.clearHistory();
mWebViewReport.loadUrl("file:///android_asset/help.html");