2016-08-23 2 views
0

J'ai deux fragments dans mon activité. Quand je change de fragment utiliser le code:FragmentTransaction valider plusieurs tâches ne fonctionne pas

private void switchCourseFragment() { 
    if (mCourseFragment == null || getActivity().isFinishing()) return; 
    FragmentTransaction mTransaction = mFragmentManager.beginTransaction(); 
    if (mFragmentLogin != null && mFragmentLogin.isAdded()) { 
     mTransaction.remove(mFragmentLogin); 
    } 
    if (!mCourseFragment.isAdded()) { 
     mTransaction.add(R.id.learncenter_contain, mCourseFragment).commitAllowingStateLoss(); 
    } 
} 

Mais ce n'est pas ce que j'attendais. Le mFragmentLogin n'a pas été supprimé, mais le mCourseFragment a été ajouté.

+0

Vous n'êtes pas valider votre transaction de suppression –

Répondre

0

Vous devez vous engager pour que cela prenne effet.

private void switchCourseFragment() { 
    if (mCourseFragment == null || getActivity().isFinishing()) return; 
    if (mFragmentLogin != null && mFragmentLogin.isAdded()) { 
     mFragmentManager.beginTransaction().remove(mFragmentLogin).commit(); 
    } 
    if (!mCourseFragment.isAdded()) { 
     mFragmentManager.beginTransaction().add(R.id.learncenter_contain, mCourseFragment).commitAllowingStateLoss(); 
    } 
} 

mais pourquoi utilisez-vous pas replace à la place?

private void switchCourseFragment() { 
    if (mCourseFragment == null || getActivity().isFinishing()) return; 
    if (!mCourseFragment.isAdded()) { 
     mFragmentManager.beginTransaction().replace(R.id.learncenter_contain, mCourseFragment).commitAllowingStateLoss(); 
    } 
} 

Ceci suppose que vos deux fragments se trouvent dans le même conteneur.

+0

Merci! Ma compréhension est que FragmentTransaction peut effectuer plusieurs tâches, enfin commet toutes les tâches. Peut-être que je me trompais! – user6703435

+0

@ user6703435 Il * PEUT * effectuer plusieurs tâches mais il s'agit d'une interface fluide. Vous devez donc utiliser la valeur de retour de 'mTransaction.remove()'. Par exemple, 'mTransaction = mTransaction.remove (mFragmentLogin);'. – Joshua