Reputation: 20132
The history of webview is not clearing... What is wrong with below code?
Web view Creation
mWebViewReport=(WebView)findViewById(R.id.report_page);
mWebViewReport.setWebViewClient(new HelloWebViewClient());
mWebViewReport.getSettings().setBuiltInZoomControls(true);
Load help file when help button click
mWebViewReport.loadUrl("file:///android_asset/help.html");
mWebViewReport.clearHistory();
mWebViewReport.clearCache(true);
load Summary file when summary button click
mWebViewReport.loadUrl("file:///android_asset/summary.html");
//On back button click
if (mWebViewReport.canGoBack()) {
mWebViewReport.goBack();
return ;
}
Here i can see the Help page too...
Upvotes: 37
Views: 41603
Reputation: 916
You can't clear history while the webview is loading a page (url) in order to clear the history setup onPageFinished listener as follows
declare a public var before the onCreate
boolean clearHistory = false;
now when you declare your mWebViewReport set this up
mWebViewReport.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
if (clearHistory)
{
clearHistory = false;
mWebViewReport.clearHistory();
}
super.onPageFinished(view, url);
}
});
Now when you call your help url insted of clearing the history just set clearHistory to true
mWebViewReport.loadUrl("file:///android_asset/help.html");
mWebViewReport.clearHistory(); // REMOVE THIS LINE
mWebViewReport.clearCache(true); // REMOVE THIS LINE
clearHistory = true; // ADD THIS LINE
Upvotes: 72
Reputation: 1471
The solution from Osama_Almaani works very fine! You can optimize your code by moving the flag into the WebViewClient implementation.
Define a field in your activity and use this instead of the anonymous declaration:
private MyWebViewClient myWebViewClient = new MyWebViewClient();
...
myWebView.setWebViewClient(myWebViewClient);
Enhance your WebViewClient class with a new method clearHistory():
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);
}
}
Now you can use this new method:
myWebViewClient.clearHistory();
mWebViewReport.loadUrl("file:///android_asset/help.html");
Upvotes: 7
Reputation: 3217
I think, clearHistory()
clears the back and forward list
. So the currently loaded url will still remain in the back list.
Upvotes: 13