Comment revenir à la page précédente si le bouton Retour est pressé dans WebView?

J'ai une application dans laquelle j'ai un WebView où j'affiche des sites Web. Cela fonctionne, en cliquant sur un lien dans la page web va à la page suivante dans le site web à l'intérieur de mon application. Mais quand je clique sur le bouton Retour du téléphone, il me prend directement dans mon application. Je veux revenir à la page précédente du site web à la place. Comment puis-je faire cela?

Voici l'exemple de code que j'utilise:

public class Webdisplay extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.webdisplay);

        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
                Window.PROGRESS_VISIBILITY_ON); 

        Toast loadingmess = Toast.makeText(this,
                "Cargando El Diario de Hoy", Toast.LENGTH_SHORT);
        loadingmess.show();

        WebView myWebView;

        myWebView = (WebView) findViewById(R.id.webview);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.loadUrl("http://www.elsalvador.com");
        myWebView.setWebViewClient(new WebViewClient());
        myWebView.setInitialScale(1);
        myWebView.getSettings().setBuiltInZoomControls(true);
        myWebView.getSettings().setUseWideViewPort(true);

        final Activity MyActivity = this;
        myWebView.setWebChromeClient(new WebChromeClient() 
        {
            public void onProgressChanged(WebView view, int progress)   
            {
                MyActivity.setTitle("Loading...");
                MyActivity.setProgress(progress * 100); 

                if(progress == 100)
                    MyActivity.setTitle(R.string.app_name);
            }
        });
    }
}
264
demandé sur Andrew T. 2011-05-21 00:14:46

10 réponses

J'utilise quelque chose comme ceci dans Mes activités avec WebViews:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                } else {
                    finish();
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

Modifier:

Pour que ce code fonctionne, vous devez ajouter un champ au Activity contenant le WebView:

private WebView mWebView;

Initialisez-le dans la méthode onCreate() et vous devriez être prêt à partir.

mWebView = (WebView) findViewById(R.id.webView);
429
répondu FoamyGuy 2015-10-05 12:37:29

Si vous utilisez Android 2.2 et supérieur (qui est la plupart des appareils maintenant), le code suivant vous donnera ce que vous voulez.

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }
}
252
répondu Kevin Westwood 2014-12-24 14:40:56

C'est ma solution. Cela fonctionne également dans Fragment.

webView.setOnKeyListener(new OnKeyListener()
{
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if(event.getAction() == KeyEvent.ACTION_DOWN)
        {
            WebView webView = (WebView) v;

            switch(keyCode)
            {
                case KeyEvent.KEYCODE_BACK:
                    if(webView.canGoBack())
                    {
                        webView.goBack();
                        return true;
                    }
                    break;
            }
        }

        return false;
    }
});
89
répondu petrnohejl 2013-07-15 10:50:56

Pourquoi ne pas utiliser onBackPressed()?

@Override
public void onBackPressed()
{
    // super.onBackPressed(); Do not call me!

    // Go to the previous web page.
}
13
répondu Gary Buyn 2011-05-20 22:02:13

La mise au point doit également être vérifiée onBackPressed

    @Override
    public void onBackPressed() {
        if (mWebview.isFocused() && mWebview.canGoBack()) {
            mWebview.goBack();       
        } else {
            super.onBackPressed();
            finish();
        }
    }
13
répondu Xar E Ahmer 2016-12-14 18:05:21

Référence complète pour le bouton Suivant et la barre de progression: remettre et le bouton Suivant dans webview

Si vous voulez aller à la page de retour lorsque vous cliquez sur le bouton de retour du téléphone, Utilisez ceci:

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }
} 

Vous pouvez également créer un bouton de retour personnalisé comme ceci:

btnback.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if (wv.canGoBack()) {
                wv.goBack();
            }
        }
    }); 
13
répondu Parsania Hardik 2018-08-17 06:39:32

Voici un code avec confirmer la sortie:

@Override
    public void onBackPressed()
    {
        if(webView.canGoBack()){
            webView.goBack();
        }else{
            new AlertDialog.Builder(this)
            .setIcon(android.R.drawable.ic_dialog_alert)
            .setTitle("Exit!")
            .setMessage("Are you sure you want to close?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();    
                }

            })
            .setNegativeButton("No", null)
            .show();    
        }   
    }
8
répondu Mohammed Ahmed 2013-10-24 01:49:07
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}
6
répondu Mahesh 2013-01-30 08:04:13

Vous devriez les bibliothèques suivantes sur votre classe gérer le onBackKeyPressed. canGoBack() vérifie si le webview peut faire référence à la page précédente. Si c'est possible, utilisez la fonction goBack() pour référencer la page précédente (revenir en arrière).

 @Override
        public void onBackPressed() {
          if( mWebview.canGoBack()){
               mWebview.goBack(); 
           }else{
            //Do something else. like trigger pop up. Add rate app or see more app
           }
  }
1
répondu Daniel Nyamasyo 2016-07-16 18:03:54

Webview dans L'activité, le code ci-dessous a fonctionné pour moi, terminez l'activité après avoir chargé l'Url webview.in onbackpressed il va à l'activité précédente

 webView = (WebView) findViewById(R.id.info_webView);
 webView.loadUrl(value);
 finish();
-3
répondu Libin Thomas 2017-07-19 11:34:02