hola cómo borrar fragmento de la parte posterior de la pila estoy usando a continuación lógica no funciona…

for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {            
     mFragmentManager.popBackStack();
}

me ayude..

InformationsquelleAutor venu | 2013-06-14

6 Comentarios

  1. 112

    Probar este

    mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    • Tengo el mismo problema y esto no funciona para mí!
    • Por favor, elaborada como esta es una de las mejores soluciones. Puede que tenga que llamar a popBackStackImmediate lugar si usted está agregando cosas nuevas a la backstack justo después de eliminarla.
    • Esto sería sólo el pop de la parte superior del estado, no está claro el backstack si más de uno.
    • Esto carga el Fragmento anterior antes de confirmar la transacción con el nuevo Fragmento. Usted no lo puede ver pero mediante programación está llamando onActivityCreated() del Fragmento anterior antes de la nueva.
  2. 71

    Respuesta anterior es casi correcta, pero se necesita un guardia todo el fragmento de la lista, ya que puede estar vacío:

    private void clearBackStack() {
        FragmentManager manager = getSupportFragmentManager();
        if (manager.getBackStackEntryCount() > 0) {
            FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
             manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    }
  3. 17
    while (getSupportFragmentManager().getBackStackEntryCount() > 0){
        getSupportFragmentManager().popBackStackImmediate();
    }
    • Esto debe ser aceptado contestar si usted elaborado más. Liberar toda la backstack es lo que queremos
    • Pero es una muestra de la última. Generalmente, después de que acaba de agregar nuevo fragmento de backstack.
    • Una advertencia aquí es que al mostrar el backstack en un bucle como este se llame eventos del ciclo de vida en todos los fragmentos que aparece (la creación de métodos, así como el cierre de los métodos), que puede dejar con efectos secundarios no deseados.
  4. 15

    es una forma de etiqueta la backstack y cuando desea borrar

    mFragmentManager.popBackStack("myfancyname", FragmentManager.POP_BACK_STACK_INCLUSIVE);

    donde el "myfancyname" debe coincidir con la cadena que se utiliza con addToBackStack. E. g.

    Fragment fancyFragment = new FancyFragment();     
    fragmentTransaction.replace(R.id.content_container, fancyFragment, "myfragmentag");
    fragmentTransaction.addToBackStack("myfancyname");

    la backstack‘s nombre y el fragmento del nombre de la etiqueta puede ser el mismo pero no se limita en este sentido

    De la documentación

    Si se establece, y el nombre o el IDENTIFICADOR de una parte posterior de la pila de entrada ha sido suministrado,
    a continuación, todas las entradas que coincidan se consume hasta que no
    se encuentra la coincidencia o la parte inferior de la pila es alcanzado. De lo contrario, todos los
    entradas de hasta, pero no incluyendo que la entrada será eliminado.

    si usted no desea utilizar un nombre para su backstack puede pasar a utilizar un primer parámetro

     mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    • ¿Cómo dar nombre a backstack?
    • Gokhan, el nombre no es el nombre de la backstack, es el Fragmento del nombre de la etiqueta. Por su ejemplo, el Fragmento que ha de estallar habría sido agregado como este: mFragmentManager.beginTransaction().add(mFragment, "myfancyname");
  5. 9

    Este es un poco tarde pero acabo de tener este problema yo mismo. Usted puede hacer:

    FragmentManager manager = getFragmentManager();
    FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
    manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);

    Bastante explicativo; usted acaba de obtener la primera entrada, obtener su id y, a continuación, el pop de todo, hasta e incluyendo la entrada con ese id.

  6. 0

    La mejor opción que he visto es aquí.

                int count = getSupportFragmentManager().getBackStackEntryCount();
                if (count > 0) {
                    getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }

Dejar respuesta

Please enter your comment!
Please enter your name here