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,
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();
}
}
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.
C'est en effet très simple.
private static void removeAllFragments(FragmentManager fragmentManager) {
while (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStackImmediate();
}
}
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.
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)
}
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();
}
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.