Modificación de la pila trasera en Android
Quisiera modificar la pila trasera en mi aplicación de Android como tal:
Ahora mismo, aquí está el flujo:
- Android fragmentos de navegación y backstack
- ¿Cómo manejar el botón de nuevo utilizando el buscapersonas?
- Activación inteligente "androide" desde una notificación push
- Botón Atrás cerrar la aplicación incluso cuando se utiliza FragmentTransaction.addToBackStack ()
- Cómo borrar backStack de soporte FragmentManager?
A -> B -> C -> D -> E -> F
Quiero ser capaz de modificar la pila trasera, de modo que cuando el usuario va a la actividad F, D y E se borran de la pila. Por lo que el flujo es F -> C si el usuario golpea la espalda.
Además, desde F, el usuario puede ir a la actividad B, esto también debería borrar C, D, E y F.
He visto alguna información sobre la posibilidad de borrar la pila o eliminar el elemento superior, pero quiero quitar un número de elementos de la pila, cuando se activa una actividad.
Cualquier ayuda es apreciada, muchas gracias.
- Android Fragmento Back Stack
- Métodos de fragmento: attach (), detach (), remove (), replace (), popBackStack ()
- Eliminación de la pila de actividad completa de Android en SDK antiguos (que carecen de FLAG_ACTIVITY_CLEAR_TASK)
- Borrar backstack y reemplazar fragmento actual con un fragmento de nivel superior
- Gestión de títulos de barras de acción al usar fragmentos y el backstack
- Android: accede a la pila de actividades mediante programación
- Android - Utilizar el dedo de izquierda a derecha para volver
- Fragmento que no llama onPause o onStop cuando se usa replace
Puedes construir una intención con la bandera intent.FLAG_ACTIVITY_CLEAR_TOP
de F a C. Entonces tendrás que llamar a startActivity () con la intención y disparar esto para que ocurra enBackPressed o algo similar.
Intent i = new Intent(this, C.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i)
Vea esta respuesta, que también trata de asegurar que C no se reinicie cuando regrese a ella: https://stackoverflow.com/a/11347608/1003511
Lo que FLAG_ACTIVITY_CLEAR_TOP
hará será volver a la instancia más reciente de la actividad C en la pila y luego borrar todo lo que está por encima de ella. Sin embargo, esto puede hacer que la actividad se vuelva a crear. Si desea asegurarse de que será la misma instancia de la actividad, utilice FLAG_ACTIVITY_SINGLE_TOP
también. De la documentación:
La instancia actualmente en ejecución de la actividad B en el ejemplo anterior recibirá la nueva intención que está iniciando aquí en su método onNewIntent () o se terminará y reiniciará con la nueva intención. Si ha declarado que su modo de inicio es "múltiple" (el valor predeterminado) y no ha configurado FLAG_ACTIVITY_SINGLE_TOP en la misma intención, se terminará y volverá a crear; Para todos los demás modos de lanzamiento o si FLAG_ACTIVITY_SINGLE_TOP está configurado, entonces este Intent será entregado al onNewIntent () de la instancia actual.
Editar: Aquí hay un ejemplo de código similar a lo que quieres hacer:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent a = new Intent(this, C.class); a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(a); return true; } return super.onKeyDown(keyCode, event); }
Fuente de código fuente: https://stackoverflow.com/a/9398171/1003511
Lo que necesita es android:excludeFromRecents="true"
que debe agregarse en la etiqueta de la actividad en el archivo de manifiesto. Detiene todas las actividades para ir a la pila que tiene esta etiqueta en la etiqueta de actividad en manifiesto.
Ejemplo de código
<activity android:name="com.xx.xx.ActivityName" android:excludeFromRecents="true" </activity>
Y asegúrese de que llama al método finish()
(después de iniciar otra actividad) en aquellas actividades que no desea que estén en la pila de actividades.
- SelectionArgs en SQLiteQueryBuilder no funciona con valores enteros en columnas
- Reemplazar un Fragmento consigo mismo no muestra nada