J'ai une mise en page à onglets actionbar / viewpager avec trois onglets disent A , B et C . Dans l' onglet C onglet (fragment), j'ajoute un autre fragment dire fragment D . avec
DFragment f= new DFragment();
ft.add(android.R.id.content, f, "");
ft.remove(CFragment.this);
ft.addToBackStack(null);
ft.commit();
Je modifie la barre d'action dans onResume de DFragment pour ajouter le bouton:
ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);
Maintenant dans DFragment, lorsque j'appuie sur le bouton Retour du matériel (téléphone), je reviens à la disposition originale avec onglets (ABC) avec CFragment sélectionné. Comment puis-je obtenir cette fonctionnalité avec le bouton haut de la barre d'action?
android
android-fragments
android-actionbar
SohailAziz
la source
la source
Réponses:
Implémentez
OnBackStackChangedListener
et ajoutez ce code à votre activité Fragment.la source
onSupportNavigateUp()
, "La méthode ne remplace pas la méthode de sa superclasse".onOptionsItemSelected
, il est également possible de vérifier le itemIdandroid.R.id.home
au lieu d'ajouteronSupportNavigateUp
.ActionBar
? Je n'en vois pas quand j'implémente ce code. Je ne peux que cliquer sur l'icône, mais cela ne fait rien. Android 4.0+.J? ai compris. remplacez simplement onOptionsItemSelected dans l'activité d'hébergement et affichez le backstack, par exemple
Appel
getActionBar().setDisplayHomeAsUpEnabled(boolean);
etgetActionBar().setHomeButtonEnabled(boolean);
enonBackStackChanged()
comme expliqué dans une réponse ci - dessous.la source
switch
instruction avec le casandroid.R.id.home
.Si vous avez une activité parentale et que vous souhaitez que ce bouton vers le haut fonctionne comme un bouton de retour, vous pouvez utiliser ce code:
ajoutez ceci à onCreate dans votre classe d'activité principale
puis ajoutez onOptionsItemSelected comme ceci:
J'utilise généralement cela tout le temps et semble assez légitime
la source
Activity
des miens, dans l'espoir qu'il revienne au fragment dont il a commencé. Le bouton de retour apparaît près de l'icône de mon application lorsque je vais à monActivity
, mais je clique sur l'icône et rien ne se passe (il devrait revenir au fragment). Une idée pourquoi? Merci.vous pouvez revenir en arrière avec le bouton haut comme le bouton retour;
la source
Je sais que cette question est ancienne, mais peut-être que quelqu'un (comme moi) en a également besoin.
Si votre activité étend AppCompatActivity , vous pouvez utiliser une solution plus simple (en deux étapes):
1 - Chaque fois que vous ajoutez un fragment non d'origine, affichez simplement le bouton haut, juste après avoir validé la transaction de fragment. Comme ça:
2 - Ensuite, lorsque vous appuyez sur le bouton UP, vous le masquez.
C'est tout.
la source
J'ai utilisé une combinaison des réponses de Roger Garzon Nieto et sohailaziz . Mon application a une seule MainActivity et des fragments A, B, C qui y sont chargés. Mon fragment "home" (A) implémente OnBackStackChangedListener, et vérifie la taille du backStack; s'il est inférieur à un, il masque le bouton UP. Les fragments B et C chargent toujours le bouton de retour (dans ma conception, B est lancé à partir de A et C est lancé à partir de B). Le MainActivity lui-même affiche simplement la backstack en appuyant sur le bouton UP, et dispose de méthodes pour afficher / masquer le bouton, que les fragments appellent:
Activité principale:
fragmentA (implémente FragmentManager.OnBackStackChangedListener):
fragmentB, fragmentC:
la source
Cela a fonctionné pour moi. Remplacez onSupportNavigateUp et onBackPressed, par exemple (code en Kotlin);
Maintenant dans le fragment, si vous affichez la flèche vers le haut
Cliquer dessus vous ramène à l'activité précédente.
la source
Kotlin:
la source
C'est une solution très bonne et fiable: http://vinsol.com/blog/2014/10/01/handling-back-button-press-inside-fragments/
Le gars a créé un fragment abstrait qui gère le comportement de backPress et bascule entre les fragments actifs en utilisant le modèle de stratégie.
Pour certains d'entre vous, il y a peut-être un petit inconvénient dans la classe abstraite ...
En bref, la solution du lien va comme ceci:
Et utilisation dans l'activité:
la source