web-dev-qa-db-fra.com

Comment effacer le contenu de la vision Web précédente avant de charger la prochaine View?

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.

23
Jack Dsilva

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 ()"

46
a fair player

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();
            }
}
3
Djek-Grif

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);
        }
    }
}
2
Pimentoso

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 WebViewClientonPageFinished(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.

1
E_X

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.

0
YomiR.Y