Cuando hago clic en el botón Cerrar sesión en mi actividad de perfil, quiero llevar al usuario a la página de inicio de sesión , donde necesita usar nuevas credenciales.
Por lo tanto, usé este código:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
en el onButtonClick
botón Cerrar sesión.
Pero el problema es que cuando hago clic en el botón Atrás del dispositivo en la Actividad de inicio de sesión, me lleva a la Actividad de perfil. Esperaba que la aplicación se cerrara cuando presione el botón de retroceso del dispositivo en LoginActivity.
¿Qué estoy haciendo mal?
También agregué android:launchMode="singleTop"
en el manifiesto de mi LoginActivity
Gracias
android
back-stack
Archie.bpgc
fuente
fuente
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
obtuve la respuesta de esta pregunta: stackoverflow.com/questions/3473168/…Respuestas:
La solución propuesta aquí funcionó para mí:
Java
Kotlin
Sin embargo, requiere un nivel de API> = 11.
fuente
FLAG_ACTIVITY_CLEAR_TASK
.Esta es la forma oficial de obtener. No es necesario cambiar todas las actividades de la aplicación.Aquí hay una solución para borrar todas las actividades de su aplicación cuando usa el botón de cierre de sesión.
Cada vez que inicie una actividad, hágalo así:
Cuando desee cerrar toda la aplicación, haga lo siguiente:
RESULT_CLOSE_ALL es una variable global final con un número entero único para indicar que desea cerrar todas las actividades.
Luego defina la
onActivityResult(...)
devolución de llamada de cada actividad para que cuando una actividad regrese con el valor RESULT_CLOSE_ALL, también llame afinish()
:Esto provocará un efecto de cascada que cerrará todas tus actividades.
Sin embargo, este es un truco y se usa
startActivityForResult
de una manera que no fue diseñado para ser utilizado.Quizás una mejor manera de hacer esto sería usar receptores de transmisión como se muestra aquí:
Al cerrar la sesión, borre la pila del historial de actividades, evitando que el botón "Atrás" abra las actividades que solo inician sesión
Consulte estos hilos para conocer otros métodos también:
Android: borrar la pila de tareas
Termina todas las actividades anteriores
fuente
Para borrar la pila de actividades por completo, desea crear una nueva pila de tareas usando TaskStackBuilder, por ejemplo:
Esto no solo creará una pila de tareas nueva y limpia, sino que también permitirá el funcionamiento adecuado del botón "arriba" si su LoginActivity tiene una actividad principal.
fuente
FLAG_ACTIVITY_NEW_TASK
ofinishAffinity()
no funcionó para mí. Solo esta respuesta resolvió el propósito.finishAffinity()
agregado en API 16. UsoActivityCompat.finishAffinity()
en versiones anteriores. Cuándo iniciará cualquier actividad con intent y finalizará la actividad actual. Ahora useActivityCompat.finishAffinity()
en su lugarfinish()
. terminará toda la actividad apilada debajo de la actividad actual. Funciona bien para mí.fuente
ActivityCompat.finishAffinity()
finishAffinity()
también finaliza la actividad actual con todas las actividades presentes en la pila de actividades de la misma afinidad.Que funciono para mi
fuente
Una posible solución que puedo sugerirle es que agregue
android:launchMode="singleTop"
en el manifiesto de mi ProfileActivity . y cuando se hace clic en cerrar sesión, puede cerrar la sesión comenzando de nuevo con LoginActivity. al cerrar la sesión, puede llamar a esto.fuente
Para API 11+ puede usar
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
así:Borrará totalmente todas las actividades anteriores y comenzará una nueva actividad.
fuente
Puede intentarlo
finishAffinity()
, cierra todas las actividades actuales y funciona en Android 4.1 y versiones posterioresfuente
También me enfrento al mismo problema.
en la actividad de inicio de sesión lo que hago es.
al cerrar la sesión
Esto funciona bien, pero cuando estoy en ActivityLoggedIn y minimizo la aplicación y hago clic en el icono del botón de inicio en el cajón de la aplicación, MainActivity comienza de nuevo: - / estoy usando la bandera
para MainActivity.
fuente
Utilice lo siguiente para
activity
eliminar el indicador CLEAR_TASK para el uso de fragmentos.
Espero que esto pueda ser útil para algunas personas.
fuente
Solo mantén
fuente
Ninguno de los indicadores de intención funcionó para mí, pero así es como lo arreglé:
Cuando un usuario se desconecta de una actividad, tenía que transmitir un mensaje de esa actividad, luego recibirlo en las actividades que quería cerrar, después de lo cual llamo a terminar (); y funciona bastante bien.
fuente
Prueba esto, funcionará:
fuente
En el nivel API 11 o superior, el uso
FLAG_ACTIVITY_CLEAR_TASK
y laFLAG_ACTIVITY_NEW_TASK
bandera de Intención para borrar toda la pila de actividad.fuente
Utilizar este
fuente
agregar al manifiesto para su actividad
android:launchMode="singleTask"
fuente
Kotlin avanzado y reutilizable:
Puede colocar la bandera directamente usando el método de establecimiento. En Kotlin
or
es el reemplazo de Java bitwise o|
.Si planea usar esto con regularidad, cree una función de extensión Intent
Luego puede llamar directamente a esta función antes de iniciar la intención
Si necesita la opción de agregar indicadores adicionales en otras situaciones, agregue un parámetro opcional a la función de extensión.
fuente