¿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 un WebView
donde 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);
}
});
}
}
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 Activity
contiene WebView:
private WebView mWebView;
Inicialícelo en el onCreate()
método y debería estar listo para comenzar.
mWebView = (WebView) findViewById(R.id.webView);
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();
}
}
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;
}
});
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();
}
}
});