12
votes

OnOptionsItemsElcit dans l'activité est appelé avant OnOptionsItemselligue en fragment. Autre façon possible?

J'ai une activité pouvant contenir plusieurs fragments. Chacun des fragments peut avoir ses propres entrées de menu dans la barre d'action. Cela fonctionne jusqu'à présent jusqu'à présent et chaque élément est cliquable et effectue l'action souhaitée.

Mon problème est le suivant. Dans la MainAlactivité, j'ai déclaré les lignes suivantes pour intercepter les appels à l'homicon de la barre d'action: xxx

Je l'ai dit dans l'activité parce que je voulais que chaque fragment appelle cela pour que Je n'ai pas à attraper l'affaire Android.R.Id.Home dans chaque fragment.

Dans un fragment, j'utilise SetDisplayHomesUpenAd (true), de sorte que je reçois la petite flèche à gauche de l'icône de la barre d'action. Lorsque l'homicon est cliqué dans ce fragment, je ne veux pas régler le fragrément, je souhaite définir le fragment qui a été affiché pour la dernière fois. J'ai donc une méthode sur le fragment: xxx

Cependant, cela ne fonctionne pas comme je le souhaite. L'OnOptionsItemsItemsItemsInlevé de l'activité est appelé en premier, attrape la menuem et redirige jusqu'au domicile. Avec les autres ménulseurs déclarés dans d'autres fragments, je peux vérifier le même comportement. L'activité est appelée d'abord, n'atteignez pas le menuitem (cas par défaut), puis redirige vers Super.OnOptionsItemsElected (article).

Il semble donc que c'est le cas comment Android gère le menu clique sur le menu. Première activité, puis fragment. est-ce qu'il y a une façon de changer cela? Je ne veux pas mettre l'androïde.r.id.home-cas dans chaque fragment et le gérer là-bas. Y a-t-il une meilleure façon de faire cela?


0 commentaires

4 Réponses :


5
votes

Selon la référence des développeurs,

"renvoie false pour permettre le traitement normal du menu de procéder, fidèle à la consommer ici."

Je vais donc essayer de retourner "Faux" par défaut dans la mise en œuvre de l'activité d'OnOptionsItemsElected (), de cette façon, l'événement passera à la mise en œuvre du fragment s'il n'est pas attrapé.


1 commentaires

Ce n'est pas ce que Mrhill demandait! Je suis confronté au même problème. Normalement, l'activité gère le bouton "Accueil UP". Parfois, nous voulons faire une action spéciale lorsque vous appuyez sur le bouton "Accueil UP" alors qu'un certain fragment est actuellement actif. Renvoyer False sur l'activité OnOptionsItemsEmplece Empêcher l'activité de gérer le boîtier.



1
votes

Je ne sais pas si c'est possible. Dans les documents officiels disponibles ici:

http://developer.android.com/guide/topics/ UI / ActionBar.html # ActionVents

Il y a une note, qui indique les éléments suivants:

[...] Cependant, l'activité a une chance de gérer d'abord l'événement, de sorte que le système appelle d'abord surpostions () sur l'activité, avant d'appeler le même rappel pour le fragment.


1 commentaires

IT est possible, à condition que vous appelle sethasoptionsmenu (true) au début du cycle de vie de fragment , par exemple. dans OncreAreview ()



13
votes

Je viens de rencontrer ce problème et je l'ai fait fonctionner avec le code suivant. Dans la fonction ONOPTIONSITEMPELLEMECTECTEMENT DE L'ACTIVITÉE CODE>, ajoutez:

if (id == android.R.id.home){
        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container);
        if(null != currentFragment && currentFragment.onOptionsItemSelected(item)){
            return true;
        }
    }


0 commentaires

1
votes

Vous pouvez faire comme @surely écrit, c'est une bonne idée, mais dans ce cas, vous appellerez olftionSitemselected code> sur le fragment sans savoir quel fragment il est, et vous devriez remplacer eroptionsitemselected code > Méthode dans tous vos fragments.

Si vous voulez seulement appeler cette méthode pour des fragments particuliers, vous devez les trouver par balise, que vous avez utilisés lors de l'ajout: p>

fragmentManager.beginTransaction()
            .add(containerId, fragment, FRAGMENT_TAG)


0 commentaires