android - studio - Cómo volver a abrir la pila para la actividad con múltiples fragmentos?
porque la bateria de mi celular samsung se baja rapido (2)
Supongamos que tengo una Actividad que contiene dos FrameLayouts (llamémosles FrameA y FrameB) que a su vez contienen un Fragmento (llamémoslos FragmentA1 y FragmentB1 respectivamente). Ahora, realizo una serie de transacciones de fragmentos individuales usando un código similar al siguiente ...
getFragmentManager()
.beginTransaction()
.replace(frameId, fragment)
.addToBackStack(null)
.commit();
... tal que reemplace FragmentA1 en FrameA con FragmentA2, luego reemplazo FragmentB1 en FrameB con FragmentB2, luego reemplazo FragmentA2 en FrameA con FragmentA3, luego reemplazo FragmentB2 en Frame2 con FragmentB3, y el estado final se parece a la imagen de arriba ( donde solo FragmentA3 y FragmentB3 son visibles).
Si comprendí correctamente cómo funciona la pila trasera, al presionar ''atrás'' intercalaré la aparición 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 presioné ''Pop FrameA'' entonces FrameA pasaría de FragmentA3 a FragmentA2 y, en cambio, si presioné ''Pop FrameB'' entonces FrameB pasaría 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 al llamar aFragmentTransaction.remove(fragment).commit()
solo se elimina el Fragmento de la Vista y no se realiza la transición. Ver de nuevo al Fragmento que se mostró anteriormente.
Básicamente, no, solo hay una pila de respaldo para una actividad.
Simplemente deberá implementar sus propios backstacks separados.
A partir de Android 4.0 (y la biblioteca de soporte asociada) hay API que deberían hacer que esto sea relativamente fácil: FragmentTransaction.detach(Fragment) te permite poner un fragmento en el mismo estado que está cuando está en la pila de respaldo, y FragmentManager.saveFragmentInstanceState(Fragment) te permite ir más lejos y tirar por completo el objeto Fragmento. No es coincidencia, estos se utilizan para implementar FragmentPagerAdapter de ViewPager y FragmentStatePagerAdapter, respectivamente, por lo que puede ver el código de estos como un ejemplo de cómo usarlos.
FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
Aquí está la respuesta más simple, y la explicación es muy clara:
¿Es esta la manera correcta de limpiar el Fragmento de la pila trasera al dejar una pila profundamente anidada?