web-dev-qa-db-fra.com

Comment effacer l'historique des vues Web?

L'historique de la vue Web ne s'efface pas ... Quel est le problème avec le code ci-dessous?

Création de vues Web

mWebViewReport=(WebView)findViewById(R.id.report_page);
mWebViewReport.setWebViewClient(new HelloWebViewClient());
mWebViewReport.getSettings().setBuiltInZoomControls(true);

Charger le fichier d'aide lorsque le bouton d'aide clique

mWebViewReport.loadUrl("file:///Android_asset/help.html");
mWebViewReport.clearHistory();
mWebViewReport.clearCache(true);

charger le fichier récapitulatif lorsque vous cliquez sur le bouton récapitulatif

  mWebViewReport.loadUrl("file:///Android_asset/summary.html");

    //On back button click
     if (mWebViewReport.canGoBack()) {
            mWebViewReport.goBack();
            return ;
      }

Ici, je peux aussi voir la page d'aide ...

29
vnshetty

Vous ne pouvez pas effacer l'historique pendant que la vue Web charge une page (URL) afin d'effacer la configuration de l'historique sur l'écouteur PageFinished comme suit

déclarer un var public avant le onCreate

boolean clearHistory = false;

maintenant, lorsque vous déclarez votre mWebViewReport configurer cela

mWebViewReport.setWebViewClient(new WebViewClient(){

    @Override
    public void onPageFinished(WebView view, String url) 
    {
        if (clearHistory)
        {
            clearHistory = false;        
            mWebViewReport.clearHistory();
        }
            super.onPageFinished(view, url);
    }
});

Maintenant, lorsque vous appelez votre url d'aide au lieu de supprimer l'historique, définissez clearHistory sur true

mWebViewReport.loadUrl("file:///Android_asset/help.html");
mWebViewReport.clearHistory();  // REMOVE THIS LINE
mWebViewReport.clearCache(true); // REMOVE THIS LINE
clearHistory = true; // ADD THIS LINE
56
Osama_Almaani

Je pense que clearHistory() efface le back and forward list. L'URL actuellement chargée restera donc toujours dans la liste arrière.

9
abhinav

La solution d'Osama_Almaani fonctionne très bien! Vous pouvez optimiser votre code en déplaçant l'indicateur dans l'implémentation WebViewClient.

Définissez un champ dans votre activité et utilisez-le à la place de la déclaration anonyme:

private MyWebViewClient myWebViewClient = new MyWebViewClient();
...
myWebView.setWebViewClient(myWebViewClient);

Améliorez votre classe WebViewClient avec une nouvelle méthode 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);
    }
}

Vous pouvez maintenant utiliser cette nouvelle méthode:

myWebViewClient.clearHistory();
mWebViewReport.loadUrl("file:///Android_asset/help.html");
5