De retour de la navigation avec des Fragments / Barre d'outils
Je suis de me gratter la tête avec ce un maintenant.... J'ai un ActionBarActivity
qui charge une première Fragment
- le menu d'origine est gonflé à l'intérieur de l'activité. Maintenant, j'ai une barre de navigation que, lorsqu'un élément est sélectionné, les temps de chargements un autre fragment et l'ajoute à la backstack.
Quand je fais cela, il ya un couple de choses que je veux mettre:
- Ensemble de la maison jusqu'indicateur
- Invalider le menu d'options à partir de l'activité principale
- Ensemble a des options de vrai pour le Fragment
- De s'assurer que l'indicateur correctement revient en arrière à l'original Fragment
Quelque chose de très étrange se passe sur la place de l'indicateur apparaît qu'une seule fois et ne se comporte pas comme le bouton de retour, et bien que j'ai invalidé et gonflé d'un nouveau menu, le menu nouveau obtient ajouté à l'origine de l'Activité de menu.
EDIT: Ok j'ai résolu l'ajout de question - avez oublié d'ajouter menu.clear()
dans le onCreateOptionsMenu
méthode.
Ma navigation tiroir de mise en page onClick
méthodes pour tous les éléments de menu qui allait déclencher la charge d'un autre Fragment:
public void navItemClick(View view) {
switch (view.getId()) {
case R.id.ripSMS:
mNavigationDrawer.toggleHome(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
FragmentTransaction mTrans = getSupportFragmentManager().beginTransaction();
mTrans.replace(R.id.voiceover_frame_layout,new MessageFragment(),"main_ui")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack("msg").commit();
break;
case R.id.ripEmail:
break;
case R.id.ripSettings:
break;
}
mNavigationDrawer.closeDrawer();
}
toggleHome:
public void toggleHome(boolean show) {
mDrawerToggle.setDrawerIndicatorEnabled(show);
if (!show) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
Une fois que l'article est déclenché le onCreate
contient les invalider et la hasOptions code:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
}
La onCreateOptionsMenu
de gonfler un autre menu mise en page (contient un seul élément appelé les paramètres).
Comme mentionné, ce que partiellement fonctionne une fois - la première fois que j'utilise l'élément à charger le Fragment, j'ai l'icône de retour en arrière, mais c'est aussi ne fonctionne pas (ce qui est défini dans onOptionsItemSelected
de vérifier pour la maison point de presse qu'il ne fait rien). Lorsque j'appuie sur le bouton de retour, il me ramène à la bonne place. Si je navigue en arrière cependant, la flèche de retour maintenant plus de montre, même si le code s'exécute par le biais de onCreate
!
Vous devez vous connecter pour publier un commentaire.
Ok, donc j'ai réussi à résoudre ce après quelques essais et erreurs. Deux modifications effectuées:
addOnBackStackChangedListener
ActionBarDrawerToggle's
setToolbarNavigationClickListener
besoin pour êtreQue je n'ai qu'une seule activité (tout le reste est Fragment de classes), j'ai ajouté la backstack auditeur pour le Parent de l'Activité
onCreate
méthode:Cette résolu la disparition flèche de retour lors de la reprise du fragment. Enfin ajouté à l'auditeur de mon NavigationDrawer de la classe d'installation:
Je suppose que les seules questions que j'ai, c'est tout ce qui pointe vers l'utilisation de l'
onOptionsItemSelected
méthode avecandroid.R.id.home
mais cela n'a jamais fonctionné pour moi. Il pourrait être la façon dont je l'ai mis en place les choses, bien sûr, mais si quelqu'un voit une chose évidente pour lesquelles vous plaît laissez-moi savoir!Ces étapes vous aide à montrer de retour bouton dans la barre d'outils lorsqu'un fragment est chargé. Et à la pop quand son cliqué.
Ensemble
setNavigationOnClickListener
de la barre d'outils en activité.Mettre en œuvre
FragmentManager.OnBackStackChangedListener
en Activité. Et l'enregistrer avecSupportFragmentManager
dansOnCreate()
OnBackStackChangedListener
Méthode de mise en œuvre:toggle.syncState();
a été un facteur clé, car sinon burger menu n'est pas visible une fois que vous revenez.Pour moi la réponse ci-dessus n'était pas assez, mais j'ai utilisé @Hamz4h_ et ajouté un peu plus de après la de creuser dans le ActionBarDrawerToggle classe. Je suis juste l'appel de cette méthode de mine de l'activité de l'onCreate:
Espère que cela va aider quelqu'un 🙂