Pregunta

Cómo despejar BackStackEntries en FragmentManager ? Este es el código que uso para cambiar mi objeto de fragmento:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

En una situación particular, necesito eliminar las entradas completas de atrás. No encontré ningún método en particular para eso en Fragment Manager. ¿Tienes alguna idea?

¿Fue útil?

Solución

He estado trabajando en un método que creo que hace lo que está pidiendo que haga, pero lo único que he podido descubrir de la documentación es si este método vacía o no el fondo o si hay alguna implicación en el Ver contenedor. Básicamente, encuentra la entrada ubicada en la parte superior de la pila y elimina todo, incluida esa entrada. Si alguien más piensa que hay implicaciones negativas, avíseme porque sería muy curioso:

public static void clearBackStack(FragmentManager manager){
    int rootFragment = manager.getBackStackEntryAt(0).getId();
    manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

Otros consejos

Esto funciona bien para mi:

clearFragments(FragmentManager fm) {
    while (fm.popBackStackImmediate());
}

Tienes razón, no hay forma de borrar la pila hasta donde puedo leer la documentación.

Este es un gran problema. Intente subir el problema a Android rastreador de emisión Y espero que alguien lo mire. Todavía estoy esperando mía.

Este es un gran truco, pero puedes intentar terminar tu Activity y comenzando de nuevo. Puede borrar la pila.

Si desea borrar toda la pila posterior, probablemente sea porque va a hacer algo que no esté relacionado con el contexto anterior. En ese caso, debe lanzar una nueva actividad.

Como empiezo a entender, con fragmentos, las actividades funcionarán como contenedores de fragmentos. Debe tratar de mantener la independencia entre los fragmentos, mientras los organiza en actividades basadas en su contexto.

En su caso, cuando ocurre la situación particular, puede lanzar una nueva actividad y colocar el fragmento deseado en esta nueva actividad en lugar de colocarla en la vieja actividad. Esta nueva actividad manejará la nueva pila de fragmentos. De esa manera, también tendrá su código un poco más encapsulado, ¿no?

Eche un vistazo a esta respuesta explicativa: Respuesta del CommonSware

¡Espero eso ayude!

¿Probaste las llamadas PopbackStack () en Fragment Manager?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top