La mise en œuvre correcte de retour de navigation et le bouton d'accueil de manutention à l'aide de la Barre d'outils dans Android
Je suis l'aide d'une seule activité et de multiples fragments(capture d'écran jointe) au sein de la même activité pour fournir une à une navigation fluide. Mais après la mise en œuvre de la dernière barre d'outils et de navigation à vue, il semble difficile de gérer la navigation et de la maison des boutons. J'ai de la difficulté avec les choses suivantes.
- La gestion du Hamburger/bouton Retour en haut à gauche. Le basculement de l'icône et de la fonctionnalité de Menu et à l'Arrière de la valeur liquidative.
- Titre de la Page - modifier le titre de la page chaque fois qu'un fragment de poussé et a sauté.
J'ai essayé plusieurs choses comme primordial onBackPressed(), setHomeAsUpIndicator, popping fragments manuellement. Plus tôt, j'ai été en utilisant ActionBarDrawer bascule pour gérer cela, mais il est défectueux en quelque sorte maintenant. J'ai vérifié sur le google échantillons, ils semblent utiliser des activités à la plupart des endroits.
Quelqu'un peut-il me guider comment mettre en œuvre un bon en arrière de navigation pour gérer le la fenêtre des éléments, bouton de Retour dans l'intérieur des fragments et des titres de page? Je suis à l'aide de AppCompatActivity, android.app.Fragment, la fenêtre des éléments et Barre d'outils.
- "Plus tôt, j'ai été en utilisant ActionBarDrawer bascule pour gérer ce qui n'est pas disponible dans la fenêtre des éléments." - Pourquoi n'utilisez-vous pas un
ActionBarDrawerToggle
avec unNavigationView
, exactement? - Jetez un oeil ici, assurez-vous de lire le dernier commentaire sur la réponse concernant le tiroir de la bascule: stackoverflow.com/questions/34025331/...
- J'ai essayé cette. Il ne fonctionne pas comme prévu. À l'intérieur du fragment, bouton d'accueil des changements de bouton de Retour, mais encore qu'il agit comme le même vieux bouton menu. Lorsque vous appuyez sur l'arrière du système et d'atteindre l'arrière de l'écran d'accueil, l'icône disparaît. J'ai fini avec ces deux questions. J'ai essayé d'ajouter le tiroir de la bascule comme mentionné dans le commentaire. Même cela ne fonctionne pas.
- Ajoutez le code que vous avez jusqu'à présent à la question
- Essayez mon answer, il se charge de tous les cas d'utilisation que vous souhaitez.
- J'ai mis à jour ma réponse, je n'ai pas l'utiliser plus
ActionBarDrawerToggle
Vous devez vous connecter pour publier un commentaire.
Il est beaucoup plus facile à illustrer avec une sorte de division de la responsabilité de votre
Activity
etFragment
.Problème 1: la Gestion du Hamburger/bouton Retour en haut à gauche. Le basculement de l'icône et de la fonctionnalité de Menu et à l'Arrière de la valeur liquidative.
De l'illustration, la solution doit être encapsulé par le
Activity
, qui ressemble à quelque chose comme ceci:Problème 2: le titre de la Page - modifier le titre de la page chaque fois qu'un fragment de poussé et a sauté.
Essentiellement, cela peut être manipulé dans le
onStart
pour chaqueFragment
c'est à dire votre ListFragment, DetailsFragment et CommentsFragment ressembler à quelque chose comme ceci:Probablement la peine d'avoir
setRetainInstance(true)
dans leonCreate
de vos fragments.Theme.AppCompat.Light.NoActionBar
tl;dr
Regarder ce:
https://youtu.be/ANpBWIT3vlU
Clone:
https://github.com/shredderskelton/androidtemplate.
C'est vraiment un problème commun et que j'ai surmonté par la création d'une sorte de projet de modèle que j'utilise chaque fois que je commence un nouveau projet Android. L'idée est d'extraire autant de la logique qui gère le bouton de retour, le 'hamburger' indicateur et le fragment de la gestion des classes réutilisables:
Commencer par la création d'un BaseActivity et BaseFragment classe. C'est là que vous allez autant de code réutilisable que possible.
Permet de commencer avec votre BaseActivity
La FragmentManager est la clé de la propriétaire de la pile de retour, de sorte que vous devez écouter des modifications à la pile de retour à partir d'ici. Le AddFramentHandler est un peu de classe, j'ai fait cuire jusqu'à le rendre plus facile d'ajouter des Fragments, des Fragments. Plus sur cela plus tard.
onBackPressed est là que la magie se produit. Vous remarquez que le texte mise en forme des méthodes.. je suis un grand Code Propre fan - si vous avez besoin d'écrire des commentaires, votre code n'est pas propre. Fondamentalement, vous devez vraiment avoir un lieu central où vous pouvez exécuter lorsque vous n'êtes pas sûr de savoir pourquoi un bouton de retour de la presse ne se passent pas de la façon dont vous vous attendez. Cette méthode est qu'place.
C'est l'autre élément clé de la BaseActivity. Fondamentalement, cette méthode vérifie si vous êtes à la fragment de racine et met en place l'indicateur en conséquence. Notez qu'il change le port d'écoute en fonction du nombre de fragments sont dans la pile de retour.
Puis il y a le BaseFragment:
Le code ci-dessus montre comment le titre est gérée par les fragments.
Essayer quelque chose comme cela:
Poignée du tiroir de l'état
onBackPressed
:Pour recharger précédente
fragment
sur le dos de la presse, toujours ajouter le fragment de transaction à l'arrière de la pile comme ceci:Pour modifier dynamiquement le titre de la page, vous pouvez appeler à partir de tous les
Fragment
sonStart
ouonResume
méthode:Note: j'ai considéré mise en page standard de déclaration et donc je n'ai pas inclus toutes les mises en page.
"Titre de la Page - modifier le titre de la page chaque fois qu'un fragment de poussé et sauté"
Lorsque vous supprimez un fragment, il y a la méthode
isRemoving()
. Il contribue à changer le titre de retour."de la fonctionnalité de Menu et Retour nav"
Suggestion:, nous devons compter sur la valeur par défaut d'android système de navigation. Si nous utilisons
addToBackStack()
pour nos fragments, en théorie, nous n'avons pas à remplacer onBackPressed() à tous.Application De Base De Qualité: https://developer.android.com/distribute/essentials/quality/core.html
"Gestion du Hamburger/bouton Retour en haut à gauche"
Je suggère l'utilisation de l'activité au lieu de "MainActivityDetailFragment" pour éviter des complications.
Ajouter ceci dans votre MainActivity d'où vous appelez des Fragments. getBackStackEntryCount() De retour le nombre de fragments dans la pile de retour. où le fragment sur le bas de la pile a l'index 0. popBackStack() Pop le Fragment du haut à l'arrière de la pile
Et dans votre Fragment où vous voulez aller retour utilisez cette fonction
Ok, après beaucoup d'essais j'ai enfin réussi à configurer une bonne navigation. J'ai besoin exactement la même chose que vous, la seule différence est que je suis en utilisant v4 Fragments, mais je ne pense pas que cela va changer quoi que ce soit ici.
Je ne suis pas à l'aide de
ActionBarDrawerToggle
depuis les derniers exemples en date de Google de ne pas utiliser ce composant plus.La solution ci-dessous fonctionne également pour la profondeur de navigation: activité parent --> fragment --> fragment etc.
Le seul changement nécessaire dans les Fragments, c'est de changer le titre:
Dans l'Activité parent
onCreate
méthode, j'initialise la suivante:Voici maintenant le code pour gérer l'action sur le bouton d'Accueil:
Et enfin le code pour gérer le dos de presse de l'action:
NOTE: je suis en utilisant un
AppCompatActivity
, unNavigationView
et le thèmeTheme.AppCompat.Light.NoActionBar
.