Je tente d'ajouter/supprimer DialogFragments
dynamiquement à/de mon FragmentManager
dynamiquement qu'un utilisateur effectue différentes actions. Le problème est que le FragmentManager
ne supprime pas tous correctement. J'appelle la fonction remove()
, donc je suis curieux de savoir pourquoi ces Fragments
ne sont pas supprimés. J'ai cherché en ligne, et la méthode de suppression est ce que les gens disent que vous devez utiliser afin de supprimer Fragments
du FragmentManager
.FragmentManager ne supprime pas les fragments ajoutés dynamiquement
Exemple de code ci-dessous montrant ce que je fais:
// originally added `LoginRestFragment` with TAG_LOGIN_REST_FRAGMENT tag to Fragment Manager
rest = new SettingsDialogFragment();
FragmentManager fm = getFragmentManager();
rest.setArguments(bundle);
Fragment fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
Log.d("frag_type", fragment.toString());
fm.beginTransaction().remove(fragment).commit();
fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
Log.d("is_frag_removed", fragment.toString());
// why does this return a Fragment type ^^ shouldn't it throw null errror?
Log.d("rest", rest.toString());
//^this shows rest has been updated from LoginRestFrament to SettingsDialogFragment
fm.beginTransaction().add(rest, TAG_LOGIN_REST_FRAGMENT).commit();
fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
Log.d("frag_type", fragment.toString());
// why is this not SettingsDialogFragment??
Déclarations de journal indiquant ce qui est représenté. Je devrais noter que ce qui est montré sur l'écran n'est plus le LoginRestFragment, mais le SettingsDialogFragment
(comme prévu), et reste est une variable de classe.
D/frag_type: LoginRestFragment
D/is_frag_removed: LoginRestFragment
D/rest: SettingsDialogFragment
D/frag_type: LoginRestFragment
Je crois que vous devez attendre qu'un cycle de thread UI se termine avant que les commits ne passent réellement. – DeeV