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.