¿Cómo volver a abrir la pila para la actividad con múltiples fragmentos?
asume que tienen una actividad que contiene dos FrameLayouts (llamémosles TramaA y FrameB) que a su vez cada uno contienen un fragmento (llamémosles FragmentA1 y FragmentB1 respectivamente). Ahora, cometo una serie de transacciones de fragmentos individuales usando un código similar al siguiente ...
getFragmentManager()
.beginTransaction()
.replace(frameId, fragment)
.addToBackStack(null)
.commit();
... de tal manera que sustituyo FragmentA1 en TramaA con FragmentA2, entonces puedo reemplazar FragmentB1 en FrameB con FragmentB2, entonces yo reemplace FragmentA2 en FrameA con FragmentA3, luego reemplace FragmentB2 en Frame2 con FragmentB3, y el estado final se parece a la imagen de arriba (donde solo están visibles FragmentA3 y FragmentB3).
Si entendí correctamente cómo funciona la pila trasera, al presionar 'atrás' intercalaré el reventado de los Fragmentos entre FrameA y FrameB (lo que refleja cómo los agregué).
¿Alguien sabe si es posible abrir la última transacción en FrameA o FrameB selectivamente? (Es decir, si he pulsado 'Pop TramaA', entonces TramaA sería la transición de vuelta de FragmentA3 a FragmentA2 y, en cambio, si Pressed Pop FrameB ', entonces FrameB sería la transición de vuelta de FragmentB3 a FragmentB2)
Suplemento: Sé que puedo obtener el Fragmento agregado por última vez a un FrameLayout determinado utilizando el método
FragmentManager.findFragmentById(int framelayoutId)
, pero llamar alFragmentTransaction.remove(fragment).commit()
solo elimina el Fragmento de la Vista y no hace la transición de vuelta al Fragmento que se mostró previamente.
Si FragmentTransaction.remove "sólo elimina el fragmento de la vista y no la transición de la vista", entonces lo que se muestra en ¿la vista? Pero puedo ver por qué esto podría causar confusión si el Mgr mantiene una sola pila de fragmentos pero no sabe cuáles son visibles simultáneamente, es decir, cómo sabría que A2 está "debajo" de A3 cuando B2 podría estar entre ellos en el ¿apilar? – gordonwd
Si a una Vista (FrameLayout en mi caso) se le han agregado múltiples Fragmentos usando el método 'FragmentTransaction.add (int, Fragment)', entonces llamando a 'FragmentTransaction.remove (Fragment) .commit()' Creo que saldrá del FrameLayout que muestra el Fragmento agregado por última vez. Sin embargo, agregar Fragmentos a la Vista usando el método 'FragmentTransaction.replace (int, Fragment)' (como lo estoy haciendo, suponiendo que esto es mejor para la memoria ?!) dejará FrameLayout sin elementos secundarios (es decir, se mostrará como una Vista vacía) ... –
Para agregar a mi comentario anterior: Puedo ver que hay algunos métodos útiles como 'FragmentManager.getBackStackEntryAt (int index)', 'FragmentManager.popBackStack (String name, int flags) ',' popBackStack (int id, int flags) ',' FragmentTransaction.addToBackStack (String name) 'y' FragmentTransaction.replace (int containerViewId, Fragment fragmento, String tag) ', simplemente no estoy seguro cómo agruparlos para lograr lo que necesito ... –