Mon scénario est initialement en train de charger une vision WebView et, plus tard, je charge le même webview avec une URL différente.
Mon problème est chaque fois que je logeais l'URL suivante, je peux voir le contenu de l'URL chargé précédemment, puis mon contenu URL actuellement chargé est affiché.
Je veux effacer le contenu chaque fois que je charge la différence d'URL.
Dire,
if (pos == 0) {
mweb.clearCache(true);
mweb.clearHistory();
mweb.loadUrl("http://stackoverflow.com/");
}
else if (pos == 1) {
mweb.clearCache(true);
mweb.clearHistory();
mweb.loadUrl("http://Android.stackexchange.com/");
}
clearCache()
et clearHistory()
ne fonctionne pas pour moi.
utilisez mweb.clearView();
Avant de charger la nouvelle URL.
Edit :
clearView () a été obsolète au niveau de l'API 18. Utilisez WebView.loadUrl("about:blank")
Pour réinitialiser de manière fiable l'état d'affichage et libérer les ressources de la page (y compris tout JavaScript exécutant).
pour résoudre le problème soulevé par @liang:
Pour avoir une navigation de retour cohérente, vous pouvez remplacer "Onpagefini", et à l'intérieur, vérifiez si l'URL contient "à propos de: vide" ou non. Si oui, utilisez "webview.goback ()"
Je suppose que vous pouvez utiliser Webview.clearHistory()
. Mais rappelez-vous si impuissant d'appeler cela après la vision de WebView. Par exemple, le code:
webView.loadData(someUrl);
webView.clearHistory();
ne fonctionnera pas car WebView n'est pas chargé. Nous devons l'effacer comme:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
clearHistory();
}
}
Je masque généralement le webview avant de charger la nouvelle URL, puis de la montrer à nouveau lorsque la progression de chargement a progressé un peu.
// url loading
mWebView.setVisibility(View.INVISIBLE);
mWebView.loadUrl(newUrl);
// show webview again
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int progress) {
if (progress >= 10) {
mWebView.setVisibility(View.VISIBLE);
}
}
}
Thnx à Stefank Commentaire trouvé ici , vous devez utiliser la méthode clearHistory()
juste lorsque la page se termine en cours de chargement dans la méthode WebViewClient
onPageFinished(WebView view, String url)
également dans le onLoadResource(WebView view, String url)
; comme suit:
myCoolWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
@Override
public void onLoadResource(WebView view, String url) {
// Notice Here.
view.clearHistory();
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
// And Here.
view.clearHistory();
super.onPageFinished(view,url);
}
});
Vous pouvez également vérifier le canGoBack()
et copyBackForwardList()
pour les manipulations.
Il semble définir le type de couche de WebView comme "logiciel" peut résoudre le problème. Peut-être que les contenus précédents sont causés par le cache de dessin.