Comment puis-je passer des données entre un fragment et son activité de conteneur? Existe-t-il quelque chose de similaire au passage de données entre les activités via des intentions?
J'ai lu ceci, mais cela n'a pas beaucoup aidé:
http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity
Réponses:
Dans votre fragment, vous pouvez appeler
getActivity()
.Cela vous donnera accès à l'activité qui a créé le fragment. À partir de là, vous pouvez évidemment appeler toute sorte de méthodes d'accesseur qui se trouvent dans l'activité.
par exemple pour une méthode appelée
getResult()
sur votre activité:la source
Essayez d'utiliser des interfaces.
Tout fragment qui doit renvoyer des données à son activité contenant doit déclarer une interface pour gérer et transmettre les données. Assurez-vous ensuite que votre activité contenant implémente ces interfaces. Par exemple:
JAVA
Dans votre fragment, déclarez l'interface ...
Ensuite, connectez l'implémentation de la classe conteneur de l'interface au fragment dans la méthode onAttach, comme ceci:
Dans votre fragment, lorsque vous devez gérer le passage de données, appelez-le simplement sur l'objet dataPasser:
Enfin, dans votre activité contenant qui implémente
OnDataPass
...KOTLIN
Étape 1. Créer une interface
Étape 2. Ensuite, connectez l'implémentation de l'interface de la classe conteneur au fragment dans la méthode onAttach (YourFragment), comme ceci:
Étape 3. Dans votre fragment, lorsque vous devez gérer le passage de données, appelez-le simplement sur l'objet dataPasser:
Étape 4. Enfin, dans votre activité implémente OnDataPass
la source
ActionBar.TabListener
et j'ai dû ajouter une interface supplémentaire.Approche la plus simple mais non recommandée
Vous pouvez accéder aux données d'activité à partir du fragment:
Activité:
Fragment:
la source
MyActivity
la source
Passer des données entre un fragment et son activité conteneur
Activité:
Fragment:
Lire la valeur dans le fragment
la source
Je ne sais pas si c'est le meilleur moyen ou non Bu Je cherche sur google depuis un certain temps pour trouver comment puis-je passer un Bundle d'un fragment à son activité de conteneur, mais tout ce que j'ai trouvé était d'envoyer des données d'activité à fragment à la place (ce qui était un peu déroutant pour moi car je suis un débutant).
plus tard, j'ai essayé quelque chose qui m'est propre qui a fonctionné exactement pour moi comme je le voulais. donc je le posterai ici si quelqu'un comme moi cherche la même chose.
// Passer des données depuis Fragment.
// Récupération des données du bundle à partir de son activité de conteneur.
la source
L'interface est l'une des meilleures solutions:
Interface de colle:
Mon activité:
MyFragment:
la source
J'ai utilisé un AppCompatActivity qui implémente des écouteurs de date. Les fragments sont devenus une nécessité car j'avais besoin de coder un sélecteur de plage de dates. Et j'avais également besoin du conteneur pour recevoir les dates sélectionnées pour les renvoyer à l'activité parent.
Pour l'activité conteneur, voici la déclaration de classe:
Et les interfaces pour les callbacks:
Les rappels sont des chaînes car les dates sont des paramètres dans une sélection de requête.
Le code des fragments (basé sur le fragment de date initial):
}
Pour composer le conteneur + fragments, j'ai utilisé un ViewPager (AppCompat) avec une classe personnalisée qui étend FragmentPagerAdapter. Pas de dialogues.
la source
Simplement, vous pouvez utiliser EventBus, c'est facile et fonctionne très bien
EventBus en 3 étapes
Définissez les événements:
public static class MessageEvent { /* Additional fields if needed */ }
Préparez les abonnés: déclarez et annotez votre méthode d'abonnement, spécifiez éventuellement un mode de thread:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
Enregistrez et désinscrivez votre abonné. Par exemple sur Android, les activités et les fragments doivent généralement s'enregistrer en fonction de leur cycle de vie:
Post événements:
EventBus.getDefault().post(new MessageEvent());
la source
Je sais que c'est peut-être tard. Mais j'étais aussi toujours perdu sur cette question. Je partage ce lien ... car c'est peut-être la meilleure explication que j'aie jamais trouvée sur le Web pour cela. Cela résout le fragment en activité et le fragment en fragment !
Très bien résolu et expliqué
la source
Cela fonctionne pour moi..
dans Activity, ajoutez cette méthode
et dans Fragment ajoutez cette ligne
la source
la source
Un autre moyen simple d'obtenir des données, transmises à partir d'une autre activité, dans un fragment d'une activité de conteneur: par exemple:
Dans votre Activity_A, vous créez un intent comme si vous envoyez une donnée (String ici) à une autre activité:
dans votre fragment, contenu dans votre Activity_B:
la source
getBaseContext()
me donne l'erreur suivante:The method getBaseContext() is undefined for the type new View.OnClickListener(){}