2014-04-26 6 views
2

J'ai une application qui a un flux suivant:menu latéral Android navigation - manipulation Fragments

enter image description here

Le point est que nous avons un seul Activity et un menu coulissant, à partir de laquelle l'utilisateur peut choisir l'un des nombreux fragments de niveau supérieur (où par niveau supérieur je veux dire que lorsque l'utilisateur appuie sur la touche Retour, l'application se termine). A partir de ces fragments, l'utilisateur peut naviguer vers d'autres fragments (par exemple, les sujets du forum-> Détails du sujet-> Profil de l'affiche-> Amis de l'affiche-> Profil de l'ami), où la touche retour devrait retourner à l'utilisateur état du fragment précédent (par exemple restaure la position de défilement, etc.).

Dans ce cas, j'utilise:

void addFragment(Fragment f) { 
    //add fragment in a transaction, so back key does its thing 
    getSupportFragmentManager().beginTransaction().addToBackStack(null) 
      .add(R.id.fragment_container, f).commit(); 
} 

Si l'utilisateur ouvre le menu latéral dans l'un de ces fragments et sélectionne un autre fragment de niveau supérieur, puis la pile tout le dos va se remplacer par le nouveau fragment (et lorsque l'utilisateur appuie en arrière, sorties app)

Dans ce cas, j'utilise:

void replaceFragment(Fragment f) { 
    //remove all fragments and add a top-level one 
    getSupportFragmentManager().popBackStackImmediate(null, 
      FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, f).commit(); 
} 

Est-ce considéré comme une bonne navigation? Dans l'application iOS, chaque fragment de niveau supérieur se souvient de sa propre pile arrière, mais cela semblait être une surcharge, donc détruire la pile arrière sur le commutateur de niveau supérieur suffirait.

+1

Totaly inutile, mais j'aime vos dessins! –

Répondre

0

Utilisez

private final static String TAG_FRAGMENT = "TAG_FRAGMENT"; 

Et

FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction ft = fragmentManager.beginTransaction(); 

ft.replace(R.id.content_frame, new Frag_Yourfrag(), TAG_FRAGMENT); 
ft.addToBackStack(null); 
ft.commit(); 

Enjoy :)

+0

dans quel but? Si je remplace des fragments en naviguant plus profond dans mon application, ils devront être recréés et l'état (par exemple la position de défilement) sera perdu du bouton de retour – Axarydax

Questions connexes