Solo quería agregar: -
Saliendo del backstack usando los siguientes
fragmentManager.popBackStack ()
se trata solo de eliminar los fragmentos de la transacción, de ninguna manera va a eliminar el fragmento de la pantalla. Entonces, idealmente, puede que no sea visible para usted, pero puede haber dos o tres fragmentos apilados uno sobre el otro, y al presionar la tecla de retroceso, la IU puede verse desordenada, apilada.
Solo tomando un ejemplo simple: -
Supongamos que tiene un fragmento A que carga Fragmnet B usando fragmentmanager.replace () y luego agregamos AddToBackStack, para guardar esta transacción. Entonces el flujo es: -
PASO 1 -> Fragmento A-> Fragmento B (nos mudamos a Fragmento B, pero el Fragmento A está en segundo plano, no visible).
Ahora realiza un trabajo en el fragmento B y presiona el botón Guardar, que después de guardar debe volver al fragmento A.
PASO 2-> Al guardar FragmentB, volvemos a FragmentA.
PASO 3 -> Entonces, un error común sería ... en el Fragmento B, haremos el fragmento Manager.replace () fragmentB con fragmentA.
Pero lo que realmente está sucediendo es que estamos cargando el Fragmento A nuevamente, reemplazando el Fragmento B. Entonces ahora hay dos FragmentA (uno de STEP-1, y uno de este STEP-3).
Dos instancias de FragmentsA están apiladas una sobre otra, lo que puede no ser visible, pero está ahí.
Entonces, incluso si limpiamos el backstack mediante los métodos anteriores, la transacción se borra pero no los fragmentos reales. Entonces, idealmente en un caso tan particular, al presionar el botón Guardar simplemente necesita volver al fragmento A simplemente haciendo fm.popBackStack () o fm.popBackImmediate () .
Entonces, el Paso 3-> fm.popBackStack () correcto vuelve al fragmento A, que ya está en la memoria.