L'Activité Et Le Fragment D'Interaction
J'ai un Activity
avec plusieurs Fragment
s. Je veux montrer une DialogFragment
ou d'en ouvrir un autre Fragment
de l'un des Fragment
s. Je sais qu'un Activity
doit être celui qui est chargé de l'ouverture Fragment
s donc, au lieu de cela, j'ai essayé un couple de choses.
PREMIÈRE
J'ai essayé d'utiliser getActivity()
et le jeta donc, je peux appeler une méthode dans la Activity
de montrer un Fragment
cependant, cela crée une dépendance dans le Fragment
avec le Activity
et je voudrais éviter d'ajouter une dépendance si possible.
DEUXIÈME
Ensuite, j'ai essayé un écouteur d'aviser le Activity
qu'il doit afficher une Fragment
. J'ai donc créé une classe dans le Activity
pour mettre en œuvre l'auditeur de l'interface. Mais j'ai eu des problèmes parce que j'ai eu à utiliser New MyActivity().new Listener();
et il lancerait une Exception
quand j'ai essayé d'utiliser getSupportFragmentManager()
depuis cette instance de la Activity
n'est pas initialisé.
TROISIÈME
J'ai ensuite essayé d'avoir le Activity
mettre en œuvre l'auditeur directement qui fonctionne parce que je suis seulement à la création d'une dépendance à l'auditeur, et non pas l'Activité. Mais maintenant je suis arrivé à un point où mon Activity
sera mise en œuvre 2 - 4 interfaces différentes ce qui me fait hésiter, car il réduit considérablement la cohésion.
De sorte que toute façon j'ai essayé j'ai l'impression de courir dans un mur de brique et de créer des dépendances, je ne suis pas sûr que j'ai besoin de créer. Je suis vissé et aller avec une de ces options? Si donc l'option qui serait le mieux? Toute aide ou suggestions sont grandement appréciés.
Il semble prometteuse. Je vais avoir à le vérifier. Merci pour l'astuce.
OriginalL'auteur Jason Crosby | 2013-07-03
Vous devez vous connecter pour publier un commentaire.
Personnellement, je dirais que des fragments doit être pensée comme étant réutilisables et des composants modulaires. Afin de fournir cette ré-utilisabilité, les fragments ne sais pas beaucoup au sujet de leur parent activités. Mais en retour, les activités devez savoir à propos des fragments qu'ils sont maintenant.
Donc, la première option ne devrait jamais être considéré à mon avis, pour la dépendance de la raison, vous l'avez mentionné, provoquant une très très couplé code.
Sur la deuxième option, des fragments peut déléguer n'importe quelle application ou INTERFACE utilisateur des décisions liées (en montrant un nouveau fragment, de décider quoi faire lorsqu'un fragment spécifique de l'événement est déclenché etc..) à leurs parents des activités. Si vos auditeurs/rappels fragment spécifique et, par conséquent, ils doivent être déclarés dans les fragments. Et les activités de la tenue de ces fragments doivent mettre en œuvre ces interfaces et de décider quoi faire.
Donc, pour moi, la troisième option est plus logique. Je pense que les activités sont plus lisibles en termes de ce qu'ils sont maintenant et de le faire sur des rappels. Mais oui vous avez raison, votre activité peut devenir un dieu de l'objet.
Peut-être vous pouvez vérifier Square Otto projet si vous ne voulez pas implémenter plusieurs interfaces. En gros, c'est un événement de bus.
OriginalL'auteur Can Elmas
Créer l'interface
Dans classe d'Activité garder la refrence de
ListenFromActivity
interfaceRendre publique la méthode à l'auditeur
Ajouter un peu de point de déclenchement de l'activité de la classe, ici, j'ai utilisé l'interaction de l'utilisateur
Maintenant dans Fragment de classe
faire de votre fragment de mettre en œuvre l'interface de la classe
Android studio vous invite à mettre en œuvre la méthode de l'interface du fragment
Partie finale de la partie écouteur exemple d'activité de ce genre dans le fragment
onCreate
méthodeFAIT!!!!. maintenant, vous pouvez appeler fragment de méthode à partir de l'activité.
OriginalL'auteur Hitesh Sahu
Je pense que votre deuxième option est sur la bonne voie.
Dans votre fragment, de définir le port d'écoute de l'interface:
De l'activité mettre en œuvre l'interface:
Passer de l'écouteur à l'fragment. Je tiens à le faire dans le Fragment du constructeur, mais qui ne fonctionne que si vous gérez vos fragments entièrement par vous-même. Vous pouvez ajouter un
setListener
méthode à votre fragment de la place.setListener
approche: si le Fragment est détruit et recréé par le système d'exploitation (à l'aide de la vierge par défaut constructeur), la référence à l'auditeur serait perdu. La meilleure façon d'y parvenir est de mettre le code dans leonAttach
méthode pour accrocher le fragment parent de l'activité de l'auditeur, la vérification lors de l'exécution qu'il prend en charge les interfaces. Voir developer.android.com/guide/components/fragments.html : "la Création de Rappels d'Événements à l'Activité".OriginalL'auteur zmbq
Vous devez transmettre vos données à partir de Fragment X jusqu'à votre FragmentActivity qui sera à transmettre ces données à votre Fragment Y. Vous faire que par le biais d'une interface définie dans votre fragment de classe et d'instancier un rappel qui est défini dans onAttach().
Plus d'informations sur comment faire ici
La Communication Avec d'autres Fragments
Rapide exemple, considérons le Fragment d'Un Fragment B. Fragment A est une liste fragment et chaque fois qu'un élément est sélectionné, il va changer ce qui est affiché dans le Fragment B. assez Simple, non?
Au premier abord, de définir Un Fragment en tant que tel.
Et voici le Fragment B
Et voici mon FragmentActivity qui les régissent à la fois
Je suppose que vous avez quelque chose comme cela, déjà, maintenant, voici comment vous pourriez modifier FragmentA(la liste fragment que nous avons besoin d'obtenir des données à partir d').
La considération la plus importante ici est que votre Activité parent implémente cette interface, ou autre chose, vous obtenez une exception. Si mis en œuvre avec succès, à chaque fois un élément dans votre liste fragment est sélectionnée, votre Activité sera informé de sa position. Évidemment, vous pourriez modifier votre interface avec n'importe quel nombre ou le type des paramètres, dans cet exemple, nous sommes juste de passage dans notre position de type entier. Espérons que cela clarifie un peu l'homme, bonne chance.
OriginalL'auteur Jade Byfield
Avez-vous essayé quelque chose comme ceci (à partir du Fragment):
Laissez-moi savoir, merci.
OriginalL'auteur LuckyMe
Pour obtenir un maximum de couplage lâche, vous pouvez utiliser un événement de bus comme OTTO de Carrés ou de l'EventBus de GreenRobot.
Vos fragments peuvent déclencher des événements qui sont gérés par votre activité et vice-versa. Le truc cool, c'est que les composants (des activités, des fragments) rien les uns des autres et vous n'avez pas besoin de déclarer toutes les interfaces ou les rappels.
Je l'utilise dans tous mes projets et il est robuste et peu ou pas d'influence sur la performance (en conditions normales).
OriginalL'auteur GabrielWeis
Juste suivez la documentation:
Fragment
:Activity
:OriginalL'auteur Tanasis