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

Tengo una aplicación en la que tengo un WebView donde WebView algunos sitios web. Funciona, haciendo clic en un enlace de la página web va a la página siguiente en el sitio web dentro de mi aplicación. Pero cuando hago clic en el botón de retroceso del teléfono, me lleva directamente a mi aplicación. Quiero volver a la página anterior en el sitio web en su lugar. ¿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); } }); } } 

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 a la Activity contiene WebView:

 private WebView mWebView; 

Inicializarlo en el método onCreate() y usted debe ser bueno para ir.

 mWebView = (WebView) findViewById(R.id.webView); 

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

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

Esta es mi solución. Funciona también en Fragmento.

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

¿Por qué no utilizar onBackPressed() ?

 @Override public void onBackPressed() { // super.onBackPressed(); Do not call me! // Go to the previous web page. } 

El enfoque también se debe comprobar enBackPressed

  @Override public void onBackPressed() { if (mWebview.isFocused() && mWebview.canGoBack()) { mWebview.goBack(); } else { super.onBackPressed(); finish(); } } 

Aquí hay un código con confirmar salir:

 @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(); } } 
 @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); } 

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

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

También puede 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(); } } }); 

Referencia completa para el siguiente botón y barra de progreso: colocar el botón anterior y el siguiente en la vista web

Deben las siguientes bibliotecas de su clase manejar el método onBackKeyPressed. CanGoBack () comprueba si la webview puede hacer referencia a la página anterior. Si es posible, utilice la función goBack () para hacer referencia a la página anterior (volver atrás).

  @Override public void onBackPressed() { if( mWebview.canGoBack()){ mWebview.goBack(); }else{ //Do something else. like trigger pop up. Add rate app or see more app } } 

Webview en Actividad, Abajo código trabajado para mí, Finalizar la actividad después de cargar el Url en webview.in onbackpressed ir a la actividad anterior

  webView = (WebView) findViewById(R.id.info_webView); webView.loadUrl(value); finish(); 
  • Trabajar con archivos ePub en android
  • DownloadListener.onDownloadStart () nunca llamado
  • Obtener valor href de la etiqueta de anclaje en Android WebView cuando se hace clic en el enlace
  • Configuración de la imagen de fondo de la vista web a un gráfico de recursos en Android
  • ¿Android WebView no carga URL?
  • Cómo reemplazar la selección de texto predeterminada de android webview os 4.1+?
  • Reaccionar WebView nativo html <select> no abre opciones en tablets Android
  • ¿Cómo manejar los idiomas RTL en las versiones anteriores a la versión 4.2 de Android?
  • Llame a la función Java desde JavaScript a través de Android WebView
  • ¿Cómo puedo capturar toda la vista en un mapa de bits cuando se utiliza el paso de peatones para mostrar la página web?
  • Cada navegador basado en WebKit bloquea sitios usando Omniture. ¿Por qué?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.