Eliminación de fragmentos de una actividad

FragmantClass rSum = new FragmantClass(); getSupportFragmentManager().beginTransaction().remove(rSum).commit(); 

Estoy intentando quitar este fragmento, cuando carga el interruptor otro fragmento. El fragmento anterior no se elimina. Aquí está el método que estoy llamando a cambiar fragmentos.

 public void switchContent(Fragment fragment) { FragmantClass rSum = new FragmantClass(); getSupportFragmentManager().beginTransaction().remove(rSum).commit(); mContent = fragment; getSupportFragmentManager() .beginTransaction() .replace(R.id.content_frame, fragment) .commit(); getSlidingMenu().showContent(); } 

 getSupportFragmentManager().beginTransaction(). remove(getSupportFragmentManager().findFragmentById(R.id.frame)).commit(); 

Pruebe esto, debería funcionar.

 public void switchContent(Fragment fragment) { getSupportFragmentManager().beginTransaction(). remove(getSupportFragmentManager().findFragmentById(R.id.frame)).commit(); mContent = fragment; getSupportFragmentManager() .beginTransaction() .replace(R.id.content_frame, fragment) .commit(); getSlidingMenu().showContent(); } 

En mi caso personal, agrego y elimino fragmentos de esta manera:

  if(getSupportFragmentManager().findFragmentById(R.id.container) != null) { getSupportFragmentManager() .beginTransaction(). remove(getSupportFragmentManager().findFragmentById(R.id.container)).commit(); } getSupportFragmentManager() .beginTransaction() .replace(R.id.container, fragment) .commit(); 

Siempre es bueno verificar si su contenedor tiene un fragmento o tendrá una excepción nula

Esta es una solución muy sencilla para SupportFragmentManager . FragmentManager no es tan conveniente, pero sigue siendo eficaz:

 List<Fragment> fragmentList = getSupportFragmentManager().getFragments(); // You might have to access all the fragments by their tag, // in which case just follow the line below to remove the fragment if (fragmentList == null) { // code that handles no existing fragments } for (Fragment frag : fragmentList ) { // To save any of the fragments, add this check // a tag can be added as a third parameter to the fragment when you commit it if (frag.getTag().equals("<tag-name")) { continue; } getSupportFragmentManager().beginTransaction().remove(frag).commit(); } 

O, si se ve obligado a usarlo (pero no se recomienda):

 .commitAllowingStateLoss(); 

Si está quitando todos los fragmentos de la vista varias veces, podría considerar verificar si el frag actual es null o isDetached() o isRemoving() o puede obtener un NullPointerExceptions .

Actualización 6-9-15: La documentación para getSupportFragmentManger().getFragments() aparentemente está oculta ahora, pero todavía funciona muy bien en mi código. Aquí está la captura de pantalla de la documentación:

Introduzca aquí la descripción de la imagen

Actualización 8-3-15 : Si no está utilizando la biblioteca de soporte para los fragmentos, por desgracia no hay getFragments() disponible, pero todavía hay un par, más inconveniente, las opciones.

  1. Dé a cada fragment una tag o un id en la creación, e iterate a través de ellos para procesar cada fragment según lo deseado.
  2. Cree un listener utilizando onAttachListener para que cada vez que se onAttachListener un nuevo fragment a la activity , puede almacenar ese fragment y, a continuación, iterar a través de esa estructura de datos para procesar cada fragment según se desee.

Cuando no use getSupportFragmentManager() , para procesar una transacción necesitará usar getFragmentManager() lugar.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.