java - regresar - programar boton atras android studio
Anular botón de retroceso para actuar como botón de inicio (9)
Aún mejor, ¿qué hay de OnPause() :
Llamado como parte del ciclo de vida de la actividad cuando una actividad pasa a un segundo plano, pero aún no se ha eliminado. La contraparte de onResume ().
Cuando la actividad B se inicie frente a la actividad A, esta devolución de llamada se invocará en A. B no se creará hasta que A en la pausa () regrese, así que asegúrese de enter code here
no haga nada largo.
Esta devolución de llamada se usa principalmente para guardar cualquier estado persistente que la actividad está editando y para asegurarse de que no se pierda nada si no hay recursos suficientes para comenzar la nueva actividad sin matar primero esta.
Este también es un buen lugar para hacer cosas como detener animaciones y otras cosas que consumen una cantidad considerable de CPU para hacer que el cambio a la siguiente actividad sea lo más rápido posible, o para cerrar recursos de acceso exclusivo como la cámara.
Al presionar el botón Atrás, me gustaría que mi aplicación pase al estado detenido, en lugar del estado destruido.
En los docs Android dice:
... no todas las actividades tienen el comportamiento que se destruyen cuando se presiona ATRÁS. Cuando el usuario comienza a reproducir música en la aplicación Música y luego presiona ATRÁS, la aplicación anula el comportamiento normal de la espalda, evitando que la actividad del jugador se destruya y continúa reproduciendo música, aunque su actividad ya no sea visible
¿Cómo puedo replicar esta funcionalidad en mi propia aplicación?
Creo que debe haber tres posibilidades ...
Capture el botón de retroceso presione (como se muestra abajo) y luego llame a cualquier método que llame el botón de inicio.
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); }
Captura el botón de retroceso, presiona y luego falsifica el botón de inicio presionando.
Capture el botón de retroceso presionando, luego inicie una Actividad de la pantalla de inicio, poniendo efectivamente la Actividad de mi aplicación en el estado detenido.
Editar: conozco los servicios y estoy usando uno en la aplicación con la que se relaciona este problema. Esta pregunta es específicamente acerca de poner la Actividad en el estado detenido en lugar del estado destruido al presionar el botón Atrás.
Anular onBackPressed () después de Android 2.0. Como
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
Ejemplo de trabajo ..
Asegúrese de no llamar a super.onBackPressed ();
@Override
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
}
De esta manera su botón Atrás actuará como botón de Inicio. No termina tu actividad sino que la lleva al fondo.
La segunda forma es llamar a moveTaskToBack(true);
en onBackPressed
y asegúrese de eliminar super.onBackPressed
He utilizado el contestador @Mirko N. utilizando el nuevo texto de edición personalizado
public class EditViewCustom extends EditText {
Button cancelBtn;
RelativeLayout titleReleLayout;
public EditViewCustom(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public EditViewCustom(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EditViewCustom(Context context) {
super(context);
}
public void setViews(Button cancelBtn,RelativeLayout titleReleLayout){
this.cancelBtn = cancelBtn;
this.titleReleLayout = titleReleLayout;
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
Log.d("KEYCODE_BACK","KEYCODE_BACK");
cancelBtn.setVisibility(View.GONE);
this.setFocusableInTouchMode(false);
this.setFocusable(false);
titleReleLayout.setVisibility(View.VISIBLE);
return super.onKeyPreIme(keyCode, event);
}
return super.onKeyPreIme(keyCode, event);
}
}
Luego configura los datos de tu actividad
searchEditView.setViews(cancelBtn, titleRelativeLayout);
Gracias.
La mayoría de las veces necesita crear un Service para realizar algo en segundo plano, y su Activity
visible simplemente controla este Service
. (Estoy seguro de que el reproductor de música funciona de la misma manera, por lo que el ejemplo en los documentos parece un poco engañoso). Si ese es el caso, entonces su Activity
puede finish
como siempre y el Service
seguirá funcionando.
Un enfoque más simple es capturar el botón Back
y llamar a moveTaskToBack(true) siguiente manera:
// 2.0 and above
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
Creo que la opción preferida debería ser que una Actividad termine normalmente y pueda recrearse, p. Ej., Leyendo el estado actual de un Servicio si es necesario. Pero moveTaskToBack
se puede usar como una alternativa rápida en ocasiones.
NOTA : como lo señaló Dave a continuación, Android 2.0 introdujo un nuevo método onBackPressed
, y estas recomendaciones sobre cómo manejar el botón Atrás.
Si desea capturar el botón Atrás, eche un vistazo a esta publicación en el Blog del desarrollador de Android . Cubre la forma más fácil de hacer esto en Android 2.0 y la mejor manera de hacerlo para una aplicación que se ejecuta en 1.xy 2.0.
Sin embargo, si su actividad está detenida, aún se puede cancelar según la disponibilidad de memoria en el dispositivo. Si desea que un proceso se ejecute sin interfaz de usuario, debe crear un Service
. La documentación dice lo siguiente acerca de los servicios:
Un servicio no tiene una interfaz de usuario visual, sino que se ejecuta en segundo plano por un período de tiempo indefinido. Por ejemplo, un servicio puede reproducir música de fondo mientras el usuario atiende otros asuntos, o puede buscar datos en la red o calcular algo y proporcionar el resultado a las actividades que lo necesitan.
Estos parecen apropiados para sus requerimientos.
Usa el siguiente código:
public void onBackPressed() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
intente anular void onBackPressed()
definido en la clase android.app.Activity.
si ayuda a alguien más, tuve una actividad con 2 diseños que activé y desactivé por visibilty, intentando emular un tipo de estructura page1> page2. si estuvieran en la página 2 y presionaron el botón Atrás, quería que regresaran a la página 1, si presionaban el botón Atrás en la página 1, debería seguir funcionando normalmente. Es bastante básico pero funciona.
@Override
public void onBackPressed() {
// check if page 2 is open
RelativeLayout page2layout = (RelativeLayout)findViewById(R.id.page2layout);
if(page2layout.getVisibility() == View.VISIBLE){
togglePageLayout(); // my method to toggle the views
return;
}else{
super.onBackPressed(); // allows standard use of backbutton for page 1
}
}
Espero que sirva de ayuda a alguien.