¿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:
- Android: problema con la depuración de javascript en webview
- Android reproducir video de youtube en la vista web
- WebView muestra el código fuente html con loadDataWithBaseURL, no visualizado
- ¿Cómo acceder a los activos locales desde una URL remota en Android WebView?
- Cómo ocultar barra de herramientas / barra de herramientas mientras desplaza hacia abajo en Webview
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); } }); } }
- Añadir http: // www. En el texto si no existe
- Abrir un menú de carga de archivos en una vista web no funciona
- Obtener ancho y altura disponible fiable con javascript
- WebView de pantalla parcial con <video> cortado por la mitad
- Carga de archivos de Android WebView
- WebView de Android haga clic en abrir en WebView no en un navegador predeterminado
- El selector de archivos no funciona en Samsung Tab 3 Android 4.4
- Recuperar User-Agent mediante programación
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();
- Android adb "No se puede abrir la conexión de sincronización!"
- ¿Cómo configurar el elemento seleccionado de Spinner por valor, no por posición?