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

Tengo una aplicación en la que tengo una WebView donde visualizo algunos sitios web. Funciona, al hacer clic en un enlace en la página web pasa a la página siguiente en el 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. Quiero volver a la página anterior en el sitio web. ¿Cómo puedo hacer esto?

Aquí está la muestra del 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); } }); } } 

Uso 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; 

onCreate() en el método onCreate() y deberías estar listo.

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

Si usa Android 2.2 y versiones posteriores (que son 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(); } } 

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

¿Por qué no usar onBackPressed() ?

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

El enfoque también debe verificarse enBackPressed

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

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

Si desea ir a la página posterior cuando hace 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(); } } }); 

aquí hay un código con confirmación de salida:

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

Debería las siguientes bibliotecas de su clase manejar el onBackKeyPressed. canGoBack () comprueba si la vista web puede hacer referencia a la página anterior. Si es posible, use la función goBack () para hacer referencia a la página anterior (retroceda).

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

Vista web en la actividad, debajo del código trabajado para mí, termine la actividad después de cargar la URL en webview.in onbackpressed ir a la actividad anterior

  webView = (WebView) findViewById(R.id.info_webView); webView.loadUrl(value); finish();