studio regresar pantalla navegar llamar fragments entre desde boton atras anterior activity actividad android android-webview

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



regresar a la pantalla anterior android studio (10)

Tengo una aplicación en la que tengo una vista web donde WebView algunos sitios web. Funciona, al hacer clic en un enlace de la página web se va 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. 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); } }); } }


¿Por qué no usar onBackPressed() ?

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


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

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


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 (volver).

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


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


Referencia completa para el siguiente botón y la barra de progreso: colocar atrás y siguiente botón en webview

Si desea volver a la página anterior 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 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(); } } });


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


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 la vista web:

private WebView mWebView;

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

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


Webview en Actividad, el código de abajo funcionó para mí, finalice la actividad después de cargar la URL en webview.

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


El enfoque también debe comprobarse en el modo BackBress.

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


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