Pregunta Android: abra la actividad sin guardarla en la pila


Tengo 2 actividades: Principal y Lista.

Desde Main puedes abrir List; de List puedes abrir Main.

Me gustaría que cada apertura de List lo haga no salvarse en la 'historia'. Entonces, presionando hacia atrás desde Main no poder regresar a la lista

¿Es posible?


74
2017-09-10 19:50


origen


Respuestas:


Al comenzar su lista Activity, establecer su Intent banderas como estas:

Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);

los FLAG_ACTIVITY_NO_HISTORY la bandera mantiene el nuevo Activity de ser agregado a la pila de historial.

NB: Como señala @Sam, puede usar i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); en lugar. No hay diferencia funcional


129
2017-09-10 19:56



En el archivo de manifiesto, agregue:

android:noHistory="true" 

a la actividad que no quieres mantener en la pila.


69
2017-09-10 20:00



Use la nueva tarea con despeje. Esto funcionó en mi caso cuando las otras opciones no.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

Borre toda la pila de historial y comience una nueva actividad en Android


20
2018-06-18 19:22



Parece que si llamas a finish () en tu actividad inmediatamente después de haber abierto otra, la que está terminada se eliminará de la pila.

por ejemplo:

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();

16
2017-09-25 15:05



En mi caso particular FLAG_ACTIVITY_NO_HISTORY no funcionó. Tampoco lo hizo FLAG_ACTIVITY_NEW_TASK o FLAG_ACTIVITY_CLEAR_TASK solo por sí mismos trabajo.

sin embargo FLAG_ACTIVITY_NEW_TASK y FLAG_ACTIVITY_CLEAR_TASK juntos hicieron el trabajo.

Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

2
2017-10-28 17:46



Solo quería agregar una forma de hacer esto en Kotlin:

val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))

2
2018-02-08 22:50



agregar la bandera FLAG_ACTIVITY_NEW_TASK para usted Intent

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK


1
2017-09-10 19:57



Última respuesta, pero agrega un poco de profundidad a otras respuestas. Todo se reduce a lo que quieres que suceda con otras actividades iniciadas a partir de esa actividad

Opción 1: solo esta actividad no debe tener historial de actividad de llamadas

Entonces solo hazlo:

Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

Opción 2: todas las actividades iniciadas a partir de esa actividad específica no deberían tener historial

A continuación, agregue el manifiesto de la actividad de llamada:

android:noHistory="true" 

Pero si desea tener el historial en una nueva actividad, entonces tiene que eliminar manualmente la bandera:

Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

Espero que aclare otras respuestas :)


0
2017-07-04 10:28



¿No puede anular el botón de retroceso en la actividad particular para detener la funcionalidad de "devolución"?

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        return true;
    }
    return super.onKeyDown(keyCode, event);
}

-2
2017-09-10 19:53