studio programacion herramientas fundamentos con avanzado aplicaciones android back-stack

programacion - Android: abra la actividad sin guardarla en la pila



manual de android en pdf (8)

¿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); }

Tengo 2 actividades: Principal y Lista.

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

Me gustaría que cada apertura de List no se guarde en la ''historia''. Por lo tanto, presionar desde Main no puede regresar a List.

¿Es posible?


Al comenzar la Activity su lista, establezca sus indicadores de Intent manera:

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);

El indicador FLAG_ACTIVITY_NO_HISTORY evita que la nueva Activity se agregue a la pila del historial.

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


En el archivo de manifiesto, agregue:

android:noHistory="true"

a la actividad que no quieres mantener en la pila.


En mi caso particular, FLAG_ACTIVITY_NO_HISTORY no funcionó. Tampoco funcionaron FLAG_ACTIVITY_NEW_TASK o FLAG_ACTIVITY_CLEAR_TASK solo.

Sin embargo, FLAG_ACTIVITY_NEW_TASK y FLAG_ACTIVITY_CLEAR_TASK juntas funcionaron.

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


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();


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))