J'ai un énorme problème avec la façon dont le android fragment backstack semble fonctionner et vous en serais très reconnaissant pour toute aide qui leur est offert.
Imaginez que vous avez 3 Fragments
[1] [2] [3]
Je veux que l'utilisateur puisse naviguer [1] > [2] > [3]
mais sur le chemin du retour (appuyer sur le bouton de retour) [3] > [1]
.
Comme je l'aurais imaginé que cela pourrait se faire en appelant ne pas addToBackStack(..)
lors de la création de la transaction qui apporte fragment [2]
dans le fragment titulaire défini en XML.
La réalité de ce qui semble bien que si je ne veux pas [2]
s'affiche à nouveau lorsque l'utilisateur appuie sur le bouton de retour sur [3]
, je ne dois pas appeler addToBackStack
dans la transaction qui illustre le fragment [3]
. Cela semble complètement contre-intuitif (provenant peut-être du monde iOS).
De toute façon si je le fais de cette façon, quand je vais d' [1] > [2]
et appuyez sur la touche de retour, j'revenir à l' [1]
comme prévu.
Si je pars [1] > [2] > [3]
, puis appuyez sur la touche back je saute en arrière pour [1]
(comme prévu).
Maintenant le comportement étrange se passe lorsque j'essaie et le saut à l' [2]
de nouveau à partir de [1]
. Tout d'abord [3]
s'affiche brièvement avant d' [2]
est offert à la vue. Si j'appuyez sur pour revenir à ce point - [3]
est affiché, et si j'appuie sur le dos une fois de plus, l'application se ferme.
Quelqu'un peut-il m'aider à comprendre ce qui se passe ici?
Et voici la mise en page du fichier xml pour mon activité principale:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/headerFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
class="com.fragment_test.FragmentControls" >
<!-- Preview: layout=@layout/details -->
</fragment>
<FrameLayout
android:id="@+id/detailFragment"
android:layout_width="match_parent"
android:layout_height="fill_parent"
/>
Mise à jour C'est le code que j'utilise pour construire par nav hiérarchie
Fragment frag;
FragmentTransaction transaction;
//Create The first fragment [1], add it to the view, BUT Dont add the transaction to the backstack
frag = new Fragment1();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.commit();
//Create the second [2] fragment, add it to the view and add the transaction that replaces the first fragment to the backstack
frag = new Fragment2();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.addToBackStack(null);
transaction.commit();
//Create third fragment, Dont add this transaction to the backstack, because we dont want to go back to [2]
frag = new Fragment3();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.commit();
//END OF SETUP CODE-------------------------
//NOW:
//Press back once and then issue the following code:
frag = new Fragment2();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.addToBackStack(null);
transaction.commit();
//Now press back again and you end up at fragment [3] not [1]
Merci beaucoup