¿Cómo volver a la página anterior si se presiona el botón Atrás en WebView?

Resuelto zvzej asked hace 54 años • 18 respuestas

Tengo una aplicación en la que tengo un WebViewdonde muestro algunos sitios web. Funciona, al hacer clic en un enlace en la página web se accede a la página siguiente del sitio web dentro de mi aplicación. Pero cuando hago clic en el botón Atrás del teléfono, me lleva directamente a mi aplicación. En su lugar, quiero volver a la página anterior del sitio web. ¿Cómo puedo hacer esto?

Aquí está el ejemplo de código que estoy usando:

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);
            }
        });
    }
}
zvzej avatar Jan 01 '70 08:01 zvzej
Aceptado

Utilizo algo como esto en mis actividades con 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);
}

Editar:

Para que este código funcione, debe agregar un campo que Activitycontiene WebView:

private WebView mWebView;

Inicialícelo en el onCreate()método y debería estar listo para comenzar.

mWebView = (WebView) findViewById(R.id.webView);
FoamyGuy avatar May 20 '2011 20:05 FoamyGuy

Si usa Android 2.2 y superior (que es la mayoría de los dispositivos ahora), el siguiente código le proporcionará lo que desea.

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }
}
Kevin Westwood avatar Mar 16 '2012 20:03 Kevin Westwood

Esta es mi solución. Funciona también en 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;
    }
});
petrnohejl avatar Jul 15 '2013 10:07 petrnohejl

Referencia completa para el botón siguiente y la barra de progreso: colocar el botón Atrás y Siguiente en la vista web

Si desea ir a la página de atrás cuando haga clic en el botón Atrás del teléfono, use esto:

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

También puedes crear un botón de retroceso personalizado como este:

btnback.setOnClickListener(new View.OnClickListener() {

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

            if (wv.canGoBack()) {
                wv.goBack();
            }
        }
    }); 
Parsania Hardik avatar Apr 23 '2017 11:04 Parsania Hardik