Navigation tiroir, la manipulation de la touche retour pour revenir au fragments?
Je suis en utilisant le construit dans le tiroir de navigation pour exécuter mon application. Je n'arrive pas à comprendre comment gérer le bouton retour. Quand il est pressé, je veux qu'il charge le premier fragment de nouveau. Fragment1.
Ainsi, lorsque l'application démarre, vous voyez Fragment1 lancé. Ils peuvent ensuite cliquez sur Fragment de 2-5 à aller vers les autres pages. Dans toutes ces pages je veux que le bouton retour pour ramener l'utilisateur à Fragment1. Le seul endroit où l'utilisateur doit être en mesure de quitter l'application via le bouton retour est Fragment1.
Puisque tout est géré par un FragmentActivity j'ai essayé de jouer avec le bouton retour de là. Je reçois une force de fermeture erreur cependant:
(01-11 14:09:33.114: E/AndroidRuntime(8292): android.view.InflateException: Binary XML file line #7: Error inflating class fragment)
C'est ce que j'ai à ce jour:
J'ai fait en sorte d'ajouter les fragments de la pile de retour comme ceci:
fm.beginTransaction().replace(R.id.main, newFragment).addToBackStack("fragBack").commit();
Bouton retour:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().findFragmentByTag("fragBack") != null) {
}
else {
super.onBackPressed();
return;
}
if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
Fragment frag = getSupportFragmentManager().findFragmentByTag("fragBack");
FragmentTransaction transac = getSupportFragmentManager().beginTransaction().remove(frag);
transac.commit();
}
}
Personne ne sait ce que je dois faire? Dois-je appeler onBackPressed dans chaque fragment (si c'est encore possible) plutôt que de la FragmentActivity qui contrôle le tiroir? Dans mon passé des applications que j'ai été correct avec le bouton retour de la fermeture de l'application, indépendamment de qui fragmentent l'utilisateur est sur mais la je suis en train de faire maintenant, je veux que le bouton de retour pour revenir à Fragment1.
Voudrais vraiment l'apprécier un peu d'aide, je vous remercie.
onItemClick
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Fragment newFragment = new MapsPage();
FragmentManager fm = getSupportFragmentManager();
switch(i) {
case 0:
newFragment = new Fragment2();
break;
case 1:
newFragment = new Fragment3();
break;
case 2:
newFragment = new Fragment4();
break;
case 3:
newFragment = new Fragment5();
break;
}
fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragback").commit();
drawerLayout.closeDrawer(rl);
}
- il devrait fonctionner sans ajout de code pour onBackkeypressed. l'erreur que vous obtenez liées à la mise en page vous pouvez poster votre disposition ainsi?
- Vraiment? Dans tous mes de Navigation de tiroirs, le bouton de retour, toujours issues de l'application. Indépendamment de ce Fragment de l'utilisateur a choisi d'aller sur. J'ai personnalisé addons pour ma mise en page, mais c'est un standard de mise en page, je ne pense pas que mon problème mais je vais le poster.
- Vous devez utiliser la méthode
addToBackStack()
dans votreFragmentTrasaction
avant de vous engager (ce que vous faites). Vous n'avez pas besoin d'en faire plus que cela pour le bouton retour pour revenir au fragment précédent - Aussi vipul'est droit, l'erreur que vous ayez un problème avec votre fichier de mise en page
- Oui tout simplement ajouter Fragment1 à backstack avant de s'engager et de n'importe quel fragment de l'utilisateur, en appuyant sur le bouton retour lui Fragment1. Aussi assurez-vous de ne pas ajouter d'autres Fragments de backstack
- vérifier mon sna vous avez besoin d'appeler "ajouter" au lieu de remplacer
- J'ai juste commenté mon onBackPressed et j'ai un force close d'erreur lorsque vous appuyez sur le bouton retour. même Exception que dans ma question.
- Comment pourrais-je aller sur le faire? J'ai beaucoup de fragments et le Fragment de la transaction n'arrive qu'à la fin. addToBackStack ne me permet pas de spécifier une classe.
- double possible de Comment reprendre un Fragment de la BackStack si existe
Vous devez vous connecter pour publier un commentaire.
Au lieu de:
Appel:
addToBackStack fonctionne avec
add
.replace
fonction supprime fragment précédent et impose de nouvelles fragment sur le dos de la pile, il est seulement un fragment de tous les temps. Donc, utiliser la fonction d'ajout de garder précédente fragments sur la pile.Toujours goto fragemnt1 partir de n'importe quel fragment de onBackPress essayez d'effectuer les opérations suivantes:
cela permettra de supprimer la dernière opération de backstack et en ajouter de nouveaux.
Essayez cette.
addToBackStack()
méthode lorsque vous passez de l'un quelconque des autres fragments (uniquement de l'appeler quand éloignez-vous de votre fragment1) alors ça peut le faireVoulais juste faire part de mes conclusions, même si cette question est un peu vieux pour quelqu'un d'autre qui ont eu le même problème avec la accepté de répondre. Pour moi, faire la méthode suggérée dans la accepté de répondre, les couches se superposent, rapidement, les rendant illisibles. Le code ci-dessous (adapté à partir de la accepté de répondre) permet d'éviter la superposition, mais ajoute encore l'écran à l'arrière de la pile.
Espère que cela aide quelqu'un!
dans certains cas, vous devez utiliser le remplacer alors vous ne pouvez pas travailler avec addtobackstack() de sorte que vous pouvez utiliser ce code dans mainActivity. dans ce code lorsque vous appuyez sur la touche back vous toujours aller sur le premier Fragment( je l'appelle HomeFragment ) et lorsque vous êtes dans la Maison Fragment de lui demander deux fois le temps de sortir de l'application (désolé pour mon mauvais anglais)
Je suggère d'éviter une substitution de
onBackPressed()
complètement par la gestion de vos transactions correctement en premier lieu. Cela aidera à éviter d'avoir à mettre en œuvre logique folle en bas de la route.Pour ce faire, nous devons d'abord définir une classe privée variable qui permettra à l'initialisation:
Le code suivant nous permet de la configuration initiale de la fonction retour en arrière en le plaçant sur la pile. Chaque fois par la suite, lorsque
popNext
est vrai, nous pop de la transaction initiale et de pousser le nouveau. Nous sommes donc en remplacement de la 1>X transaction avec le 1>Y transaction.La supplémentaire intégrée
if
états face à la sélection de l'élément initial, puisque nous ne voulons pas aller de 1>1. Si c'est le premier cas, on a juste à fermer le tiroir. Les autres besoins de l'affaire à la loi, comme le bouton de retour, mais nous devons nous souvenir de la définir comme si il est de retour à l'état initial!Remarque: Mon code utilise
getFragmentManager()
au lieu degetSupportFragmentManager()
qui est une fonction native, je crois que de Nid d'abeille.