1

J'ai un programme où, lorsqu'un utilisateur clique sur un bouton, il passe d'un fragment à un autre. Les problèmes sont que je veux que le fragment précédent réapparaisse une fois le clic sur le bouton de retour. Code ci-dessous:Retour au fragment précédent

Cela crée le premier fragment:

getFragmentManager().beginTransaction().add(R.id.team_fragment_holder, teamFragment).addToBackStack(null).commit(); 

Et c'est le passage au second fragment:

setContentView(R.layout.mixed_team_holder); 
    FragmentManager fragMan = getFragmentManager(); 
    FragmentTransaction fragTrans = fragMan.beginTransaction(); 
    fragTrans.add(R.id.team_1,team1); 
    fragTrans.add(R.id.team_2, team2); 
    fragTrans.commit(); 

Le problème est en ce moment que lorsque je frappe le bouton de retour, une page blanche apparaît (je suppose que c'est le (R.id.team_fragment_holder).) Une idée pour faire réapparaître le premier fragment avec toutes les informations à ce sujet?

Note: tous les fragments étend listfragment.

Merci d'avance.

Répondre

4

Votre transaction fragmentaire initiale ne doit pas être ajoutée au backstack et la seconde doit l'être. La page blanche que vous voyez lorsque vous appuyez sur retour est le résultat de la suppression du teamFragment car il est sur le backstack.

getFragmentManager().beginTransaction().add(R.id.team_fragment_holder, teamFragment).commit(); 

et

FragmentManager fragMan = getFragmentManager(); 
FragmentTransaction fragTrans = fragMan.beginTransaction(); 
fragTrans.add(R.id.team_1,team1); 
fragTrans.add(R.id.team_2, team2); 
fragTrans.addToBackStack(null); 
fragTrans.commit(); 
+0

Merci de la réponse, mais cela n'a pas fonctionné. Après avoir cliqué sur le bouton de retour, je reçois toujours une page blanche. Dois-je tout sauvegarder du fragment précédent avant de créer le suivant et de le recharger après avoir appuyé sur le bouton Précédent? –

+0

Ou peut-être que l'écran vide a été créé parce que j'ai défini une nouvelle mise en page pour afficher les fragments team1 et team2? –

+0

C'est probablement parce que vous définissez une nouvelle mise en page. Vous ne devriez pas avoir à re-définir votre mise en page comme ça. Cela peut/devrait être géré avec Fragments par programmation. –

1

Vous devez ajouter le fragment de Back Stack.

FragmentManager fragMan = getFragmentManager(); 
FragmentTransaction fragTrans = fragMan.beginTransaction(); 
fragTrans.add(R.id.team_1,team1); 
fragTrans.add(R.id.team_2, team2); 
fragTrans.addToBackStack(null);//Here add the fragment 
fragTrans.commit(); 

Et vous devez valider le bouton de retour.

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) { 
     super.onBackPressed(); 
    } else { 
     getSupportFragmentManager().popBackStack(); 
    } 
} 
+0

'Activity' gère déjà le popping backstack pour vous. Il n'y a pas besoin de surcharger onBackPressed(). –

+0

Même problème que la première réponse: une page vierge est affichée après que j'appuie sur le bouton de retour. Je me demande simplement si j'ai besoin de tout sauvegarder sur le premier fragment avant d'appeler le second et de le recharger ensuite. Merci! –

+0

cela a fonctionné pour moi, super –

1
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.fragment_button_project_location_ok: 

     //getActivity().finish(); 
     //add back to previous screen 
     getFragmentManager().popBackStack(); 
     break; 

    default: 
     break; 
    } 
} 
Questions connexes