web-dev-qa-db-fra.com

Retirer tous les fragments du conteneur

existe-t-il un moyen de supprimer tous les fragments ayant déjà ajouté la vue spécifique avec son ID de vue?

Par exemple, je veux supprimer tous les fragments auxquels on ajoute R.id.fragmentcontainer.

Merci,

21
Ali Gürelli

C'est très simple, il suffit de parcourir tous les fragments et de l'enlever

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

Mais dans le cas de tiroir de navigation assurez-vous de le vérifier, si vous essayez de le retirer, vous obtiendrez une erreur.

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

Dernier mais très important soyez sûr de vérifier la valeur null avant de faire des transactions de fragment

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

Vous pouvez essayer ci-dessous le code

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

* frag est l'objet du fragment que vous souhaitez supprimer.

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

cela supprimera le fragment logé dans le conteneur "your_container".

HapPy codage.

35
Rhn Bhadani

C'est en effet très simple.

private static void removeAllFragments(FragmentManager fragmentManager) {
    while (fragmentManager.getBackStackEntryCount() > 0) {
        fragmentManager.popBackStackImmediate();
    }
}
5
Jaap-Jan Hellinga

Enregistrez tous vos fragments dans une liste de tableaux. 

Initialisation:

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

Ajout de fragment à la liste:

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

Lorsque vous souhaitez supprimer all them, procédez comme suit:

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

J'utilise cette méthode en production depuis des années et cela fonctionne à merveille. Faites moi savoir si vous avez des questions.

3
Vingtoft

Si quelqu'un recherche un code dans Kotlin:

private fun clearFragmentsFromContainer() {
            val fragments = supportFragmentManager.fragments
            if (fragments != null) {
                for (fragment in fragments) {
                    supportFragmentManager.beginTransaction().remove(fragment).commit()
                }
            }
            //Remove all the previous fragments in back stack
            supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
}
1
Devrath

Essayez ceci, espérons que cela aide: 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();
} 
0
Gian_DC

Utilisez ce code

activity?.let {
it.supportFragmentManager.fragments.forEach { fragment ->
        it.supportFragmentManager.beginTransaction().remove(fragment).commit()
    }
}

J'espère que ça aide.

Je vous remercie.

0
Ajay Nishad