vnshetty
vnshetty

Reputation: 20132

How to clear webview history?

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

Answers (3)

Osama_Almaani
Osama_Almaani

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

Christian Schulzendorff
Christian Schulzendorff

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

abhinav
abhinav

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

Related Questions