En Android tengo algunas actividades, digamos A, B, C.
En A, uso este código para abrir B:
Intent intent = new Intent(this, B.class);
startActivity(intent);
En B, uso este código para abrir C:
Intent intent = new Intent(this, C.class);
startActivity(intent);
Cuando el usuario toca un botón en C, quiero volver a A y borrar la pila de respaldo (cerrar B y C). Entonces, cuando el usuario usa el botón de retroceso B y C no aparecerá, he intentado lo siguiente:
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Pero B y C siguen apareciendo si uso el botón Atrás cuando estoy de vuelta en la actividad A. ¿Cómo puedo evitar esto?
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
fuente
CLEAR_TOP
bandera, esta combinación es la ÚNICA que borró por completo toda la pila e hizo que la nueva actividad sea la única en la aplicación. ¡Gracias!¿Qué pasa con la adición en el archivo de manifiestos para la actividad relacionada:
a la definición de actividad de B y C? No se agregarán al backstack. No estoy seguro si eso es lo que quieres.
fuente
Esto me molesta por mucho tiempo. Finalmente lo resolví haciendo esto:
En fragmento, use:
En Actividad, use (agregue un indicador de intención más en
Intent.FLAG_ACTIVITY_CLEAR_TASK
comparación con el fragmento):fuente
android:launchMode="singleTop"
al elemento de actividad en su manifiesto para la Actividad Aintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
yintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
cuando comience la Actividad AEsto significa que cuando se inicia la Actividad A, se borran todas las tareas que se encuentran encima para que A esté en la parte superior. Se crea una nueva pila posterior con A en la raíz, y el uso
singleTop
garantiza que solo se inicie A una vez (ya que A ahora está en la parte superior debido a..._CLEAR_TOP
).fuente
A partir de API 16 (Jelly Bean), solo puede llamar
finishAffinity()
.Ahora también puedes llamar
ActivityCompat.finishAffinity(Activity activity)
con la biblioteca de compatibilidad.Asegúrese de establecer taskAffinity en el manifiesto en un nombre de paquete único para ese grupo de actividades.
Consulte para obtener más información:
http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29
fuente
Intenta usar
y no
fuente
Si su aplicación tiene un mínimo de SDK versión 16, entonces puede usar finishAffinity ()
Finalice esta actividad, así como todas las actividades inmediatamente debajo de ella en la tarea actual que tengan la misma afinidad.
Esto es trabajo para mí En la pantalla de Pago superior, elimine todas las actividades de acumulación,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
fuente
Según Wakka en Eliminar una actividad de la pila de historial ...
Agregue
android:noHistory="true"
atributo a su<activity>
en elAndroidManifest.xml
siguiente:fuente
Para futuras investigaciones, prueba este código.
fuente
Use finishAffinity (); en la tarea C al iniciar la tarea A para borrar las actividades de backstack.
fuente
Use este código para comenzar una nueva Actividad y cierre o destruya todas las demás pilas de actividades o pilas traseras.
fuente
fuente
Encontré una solución interesante que podría ayudar. Hice esto en mi
onBackPressed()
método.FinishAffinity
elimina la conexión de la actividad existente a su pila. Y luego terminar te ayuda a salir de esa actividad. Lo que eventualmente saldrá de la aplicación.fuente
¿Encontré las respuestas aquí un poco engañosas porque el código en la pregunta original parece funcionar bien para mí?
Siendo A la actividad raíz, comenzar desde B o C solo con FLAG_ACTIVITY_CLEAR_TOP elimina B y C de la pila posterior.
fuente
En kotlin es casi lo mismo que java. Solo | el símbolo se reemplaza por o texto. Entonces, está escrito como ...
fuente
Probé todas las soluciones y ninguna funcionó individualmente para mí. Mi solución es:
Declarar
Activity A
comoSingleTop
mediante el uso[android:launchMode="singleTop"]
en manifiesto de Android.Ahora agregue las siguientes banderas mientras se inicia
A
desde cualquier lugar. Vaciará la pila.fuente
Intent.FLAG_ACTIVITY_CLEAR_TOP
No funcionará en este caso. Por favor use(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
Para obtener más detalles, consulte esta documentación.
fuente
Me suena como que necesita para comenzar
Activity C
a partirActivity B
usandostartActivityForResult()
. Al hacer clic en un botón enActivity C
, llamadasetResult(RESULT_OK)
yfinish()
asíActivity C
se terminó. EnActivity B
, puede obtener laonActivityResult()
respuesta también recurriendofinish()
a sí mismo, y luego volverá aActivity A
.fuente
logout.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK); logout.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
fuente
Puede utilizar este ejemplo para llamar a su
Activity A
deActivity C
Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);
fuente
para mí agregar
Intent.FLAG_ACTIVITY_CLEAR_TASK
solucionó el problemafuente
Kotlin avanzado y reutilizable:
Puede establecer la bandera directamente utilizando el método setter. En Kotlin se
or
encuentra el reemplazo para Java o bit a bit|
.Si usa esto más de una vez, cree una función de extensión de intención
Luego puede llamar directamente a esta función antes de comenzar 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
Además
FLAG_ACTIVITY_CLEAR_TOP
, puede intentar agregarIntent.FLAG_ACTIVITY_SINGLE_TOP
también:intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
fuente
El código dado funciona correctamente. He intentado en la muestra del ciclo de vida de la aplicación.
No tengo B y C en la pila posterior después de comenzar la actividad A con bandera, FLAG_ACTIVITY_CLEAR_TOP
fuente
Llamé
activity_name.this.finish()
después de comenzar una nueva intención y funcionó para mí.Pero no funcionará para mí ... No estoy sugiriendo esta solución para su uso, pero si la marca de configuración no funciona para usted, puede intentar esto ... Pero aún así, le recomiendo que no la use
fuente
Agregar NO bandera de historial en la intención.
En la actividad B, comience la actividad C como se muestra a continuación >>>>>>
fuente
En manifiesto
y
fuente
Agrega esto a tu
Activity B
yActivity C
o
Override
onBackPressed
función para evitar presionar hacia atrás con areturn
.fuente
Use el método setFlags () para borrar la parte posterior abierta, cerrar todas las actividades e iniciar su actividad
fuente