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:
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.
- Dé a cada
fragment
unatag
o unid
en la creación, e iterate a través de ellos para procesar cadafragment
según lo deseado. - Cree un listener utilizando
onAttachListener
para que cada vez que seonAttachListener
un nuevofragment
a laactivity
, puede almacenar esefragment
y, a continuación, iterar a través de esa estructura de datos para procesar cadafragment
según se desee.
Cuando no use getSupportFragmentManager()
, para procesar una transacción necesitará usar getFragmentManager()
lugar.