Tengo una actividad principal, que cuando hago clic en un botón, comienza una nueva actividad, utilicé el siguiente código para hacerlo:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
El código anterior se ejecutó desde la actividad principal.
Ahora en mi nueva actividad que es llamada por la actividad principal, tengo un botón de retroceso. Cuando hago clic en este botón Atrás, quiero que se cierre mi nueva actividad y debe volver a la actividad principal original.
He intentado llamar super.finish()
y solo finish()
(de la nueva actividad) pero luego cierra toda mi aplicación (incluida mi actividad principal).
¿Cómo puedo cerrar la actividad que está actualmente enfocada y luego volver a la actividad principal?
EDITADO
El hecho de que el botón de retroceso de mi teléfono también cierre toda mi aplicación, ¿me lleva a pensar que he iniciado la segunda actividad de forma incorrecta?
Ok he estado buscando
Creé una actividad de configuración que usa el mismo código de manifiesto y el mismo código para iniciar la actividad.
Para la configuración Actividad cuando presiono el botón Atrás, vuelve a la actividad Principal.
Con la actividad mencionada anteriormente en la pregunta principal, simplemente sale de toda mi aplicación.
Entonces, el problema no parece estar en el código para finalizar la actividad, sino en la actividad misma.
fuente
Respuestas:
Creo que estás llamando al
finish()
métodoMainActivity
antes de comenzarSettingsActivity
.El escenario que ha descrito se producirá de las siguientes dos maneras:
YA SEA
Ha configurado
android:noHistory = "true"
paraMainActivity
adentro loAndroidManifest.xml
que haceMainActivity
quefinish
se presione automáticamente la tecla Atrás.O
Antes de cambiar a su 'ConfiguraciónActividad', ha llamado
finish()
a suMainActivity
, que lo mata. Cuando presiona el botón Atrás, dado que ninguna otra actividad está preestablecida en la pila para aparecer, vuelve a la pantalla principal.fuente
Puede volver a la actividad anterior simplemente llamando a finish () en la actividad en la que se encuentra. Tenga en cuenta cualquier código después de que se ejecute la llamada finish (): puede hacer una devolución después de llamar a finish () para solucionar esto.
Si desea devolver los resultados a la actividad uno, al iniciar la actividad dos necesita:
Dentro de su actividad llamada, puede obtener la intención del parámetro onCreate () o usar
Para establecer devolver un resultado a la actividad uno, luego en la actividad dos
Si no tiene intención de regresar, simplemente diga
Si la actividad tiene malos resultados, puede usar Activity.RESULT_CANCELED (esto se usa por defecto). Luego en la actividad uno haces
Para finalizar la actividad dos, use los mismos métodos con finish () como se describió anteriormente con los resultados ya establecidos.
fuente
Cuando hace clic en su botón, puede hacer que llame:
fuente
si usas fragmento deberías usar
si usas una sola actividad puedes usar
fuente
prueba este código en lugar de
finish
:onBackPressed();
fuente
Estás haciendo esto demasiado difícil. Si entiendo lo que está tratando de hacer correctamente, el botón 'atrás' incorporado y el propio Android harán todo el trabajo por usted: http://developer.android.com/guide/components/tasks-and-back- stack.html
Además, la implementación de un botón "atrás" personalizado viola la Guía de calidad de la aplicación principal UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html
fuente
fuente
Esto cierra toda la aplicación:
fuente
Creo que su segunda actividad probablemente no esté vinculada a su actividad principal como actividad secundaria. Verifique su
AndroidManifest.xml
archivo y vea si la<activity>
entrada para su actividad secundaria incluye unandroid:parentActivityName
atributo. Debería verse más o menos así:fuente
Simplemente no llame
finish()
a suMainActivity
entonces esto elimina la necesidad de anular suonBackPressed()
en su aSecondActivity
menos que esté haciendo otras cosas en esa función. Si siente la "necesidad" de este botón de retroceso, simplemente puede llamarfinish()
alSecondActivity
y eso lo llevará a su cuentaMainActivity
siempre que no lo haya llamadofinish()
.fuente
Activity
fue el anterior o siempre volver alMainActivity
? Además, si se está quedando sin memoriaBitmaps
, debería leer Esta parte de Documentos . Me ayudóNo sé si esto es útil o no, pero estaba luchando con el mismo problema y encontré una manera bastante fácil, con solo una variable booleana global y acción onResume (). En mi caso, mi Actividad C si se hace clic en un botón específico, ¡debería activar el final () de la Actividad B!
Actividad_A -> Actividad_B -> Actividad_C
Actividad_A (se abre normalmente Actividad_B)
Actividad_B (al hacer clic en un botón, se abre Actividad_C):
Entonces, cada vez que hago clic en el botón de la Actividad C, haría la función "onResume ()" de la Actividad B y volvería a la Actividad A.
fuente
Pruebe esto, funciona tanto en el botón de retroceso de la barra de herramientas como en el botón de retroceso de hardware .
fuente
android:parentActivityName=".MainActivity"
la segunda. Este código maneja ese botón de Inicio / Atrás en la barra de herramientas y simplemente finaliza la actividad actual volviendo a la anterior en la pila. Gracias.Finish cierra toda la aplicación, esto es algo que odio en el desarrollo de Android, no terminar, está bien, pero no se mantienen con la sintaxis correcta que tienen
Por qué no
fuente
Nos encontramos con una situación muy similar.
Respuesta incorrecta "al presionar hacia atrás"
He verificado todas las respuestas publicadas anteriormente y ninguna de ellas funcionó. La sintaxis de Java para la transición entre la Actividad 2 y la Actividad 3 se revisó para que sea correcta.
Recién llegado de la codificación al llamar a una aplicación de terceros. por una actividad. Decidimos investigar el ángulo de configuración, lo que finalmente nos permitió identificar la causa raíz del problema.
Alcance : Configuración de la Actividad 2 (llamante).
Causa raíz :
Solución :
Aparentemente, en este tema "al presionar hacia atrás", singleInstance considera las Actividades invocadas en una instancia con la Actividad que realiza la llamada, mientras que singleTask permitirá que las Actividades invocadas tengan su propia identidad suficiente para que la función de presionar hacia atrás funcione como debería.
fuente
Prueba este método ...
fuente
puede ser posible que esté llamando a finish (); en el evento de botón de clic para que la actividad principal se cierre justo después de hacer clic en el botón y cuando regrese de la siguiente actividad, la aplicación se cierra porque la actividad principal ya está cerrada y no hay actividad activa.
fuente
en el método onCreate de su actividad, escriba el siguiente código.
Luego, anule el método seleccionado de onOptionsItem de su actividad de la siguiente manera
Y eres bueno para ir.
fuente
Tienes que usar esto en tu MainActivity
El indicador iniciará múltiples tareas que mantendrán su actividad principal, cuando llame al finalizar matará la otra actividad y lo llevará de regreso a la actividad principal
fuente