Essayer d'appeler une méthode dans mon activité à partir d'un fragment. Je veux que le fragment donne les données de la méthode et obtienne les données lorsque la méthode revient. Je veux réaliser similaire à faire appel à une méthode statique, mais sans utiliser de statique car cela crée des problèmes dans l'activité.
Nouveau sur les fragments donc j'ai besoin d'une explication simple et pédagogique!
Merci!
android
android-fragments
Joakim Ericsson
la source
la source
Vous devriez probablement essayer de découpler le fragment de l'activité au cas où vous voudriez l'utiliser ailleurs. Vous pouvez le faire en créant une interface que votre activité implémente.
Vous définiriez donc une interface comme celle-ci:
Supposons par exemple que vous vouliez donner à l'activité une chaîne et lui faire retourner un entier:
Cela peut être défini dans le fragment ou dans un fichier séparé.
Ensuite, votre activité implémenterait l'interface.
Ensuite, dans votre fragment, vous auriez une variable MyStringListener et vous définiriez l'écouteur dans la méthode fragment onAttach (activité d'activité).
modifier (17.12.2015):
onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
La première réponse fonctionne certainement, mais elle associe votre fragment actuel à l'activité de l'hôte. Il est recommandé de conserver le fragment découplé de l'activité hôte au cas où vous souhaiteriez l'utiliser dans une autre activité.
la source
Pour les développeurs Kotlin
Pour les développeurs Java
la source
Mettre à jour après avoir mieux compris le fonctionnement des fragments. Chaque fragment appartient à une activité parent. Il suffit donc d'utiliser:
De l'intérieur du fragment. C'est une meilleure réponse car vous évitez les moulages superflus. Si vous ne pouvez pas éviter les lancers avec cette solution, utilisez celle ci-dessous.
============
ce que vous avez à faire est de vous lancer dans l'activité extérieure
créer une nouvelle instance sera source de confusion pour le cadre Android et il ne pourra pas le reconnaître. voir également :
https://stackoverflow.com/a/12014834/1984636
https://stackoverflow.com/a/2042829/1984636
la source
Bien que j'aime complètement la réponse de Marco, je pense qu'il est juste de souligner que vous pouvez également utiliser un cadre basé sur la publication / l'abonnement pour obtenir le même résultat, par exemple si vous allez avec le bus d'événements, vous pouvez faire ce qui suit
fragment:
Activité:
la source
Dans kotlin, vous pouvez appeler la méthode d'activité à partir d'un fragment comme ci-dessous:
la source
Pour accéder à une fonction déclarée dans votre Activité via votre fragment veuillez utiliser une interface, comme indiqué dans la réponse de marco.
Pour accéder à une fonction déclarée dans votre Fragment via votre activité vous pouvez l'utiliser si vous n'avez pas de tag ou d'identifiant
Ceci est le ViewpagerAdapterClass
Cette réponse est pour les noobs comme moi. Bonne journée.
la source
C'est de la classe Fragment ...
Ce code de la classe d'activité ...
la source
J'ai essayé avec toutes les méthodes présentées dans ce fil et aucune n'a fonctionné pour moi, essayez celle-ci. Ça a marché pour moi.
la source
Je cherchais la meilleure façon de le faire, car toutes les méthodes que nous voulons appeler ne se trouvent pas dans Fragment avec le même parent d'activité.
Dans votre fragment
Dans votre activité
la source
((YourActivityName)getActivity()).functionName();
Exemple :
((SessionActivity)getActivity()).changeFragment();
Remarque: le nom de la classe doit être public
la source
Où
your_activity
est le nom de votre activité etmethod_name()
le nom de la méthode que vous souhaitez appeler.la source
Pour Kotlin, essayez-le
la source