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 ...
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
Je pense que clearHistory()
efface le back and forward list
. L'URL actuellement chargée restera donc toujours dans la liste arrière.
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");