una studio pasar parametros onattach navegar llamar fragments fragmentos estaticos enviar entre desde datos cómo activity android fragment

android - studio - Retire todos los fragmentos del contenedor



pasar variables a un fragment (5)

De hecho es muy simple.

private static void removeAllFragments(FragmentManager fragmentManager) { while (fragmentManager.getBackStackEntryCount() > 0) { fragmentManager.popBackStackImmediate(); } }

¿Hay alguna forma de eliminar todos los fragmentos que ya agregaron la vista específica con su id de vista?

Por ejemplo, quiero eliminar todos los fragmentos que se agregan a la vista R.id.fragmentcontainer.

Gracias,


Es muy simple, simplemente recorre todos los fragmentos y elimínelo.

for (Fragment fragment:getSupportFragmentManager().getFragments()) { getSupportFragmentManager().beginTransaction().remove(fragment).commit(); }

Pero en el caso de Navigation Drawer, asegúrese de comprobarlo; si intenta eliminarlo, obtendrá un error.

for (Fragment fragment:getSupportFragmentManager().getFragments()) { if (fragment instanceof NavigationDrawerFragment) { continue; } else { getSupportFragmentManager().beginTransaction().remove(fragment).commit(); } }

Por último, pero muy importante, asegúrese de verificar si hay nulos antes de realizar transacciones de fragmentos

for (Fragment fragment:getSupportFragmentManager().getFragments()) { if (fragment instanceof NavigationDrawerFragment) { continue; } else if (fragment!=null) { getSupportFragmentManager().beginTransaction().remove(fragment).commit(); } }


Guarda todos tus fragmentos en un ArrayList.

Inicializando:

List<Fragment> activeCenterFragments = new ArrayList<Fragment>();

Añadiendo fragmento a la lista:

private void addCenterFragments(Fragment fragment) { fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.empty_center_layout, fragment); activeCenterFragments.add(fragment); fragmentTransaction.commit(); }

Cuando quieras eliminarlos todos , haz lo siguiente:

private void removeActiveCenterFragments() { if (activeCenterFragments.size() > 0) { fragmentTransaction = fragmentManager.beginTransaction(); for (Fragment activeFragment : activeCenterFragments) { fragmentTransaction.remove(activeFragment); } activeCenterFragments.clear(); fragmentTransaction.commit(); } }

He usado este método en producción durante años, y funciona como un encanto. Hazme saber si tienes alguna pregunta.


Intenta esto, espero que ayude: D

try { if(manager.getFragments()!=null){ if(manager.getBackStackEntryCount()>0) { for (int i = 0; i < manager.getBackStackEntryCount(); i++) manager.popBackStack(); manager.beginTransaction().remove(getSupportFragmentManager() .findFragmentById(R.id.main_content)) .commit(); } } }catch (Exception e){ e.printStackTrace(); }


Puedes probar el siguiente código

getSupportFragmentManager().beginTransaction().remove(frag).commit();

* Frag es el objeto de fragmento que desea eliminar.

OR getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.your_container)).commit();

eliminará el fragmento que está alojado en el contenedor "su_contenedor".

Codificación HapPy.