web-dev-qa-db-fra.com

Envoyer les données de l'activité au fragment déjà créé

J'ai seulement trouvé des informations sur la façon de créer un fragment lui envoyant des données, mais uniquement dans son instanciation avec le constructeur.

Mais je veux savoir s'il est possible d'envoyer des données (par exemple, deux objets Double) à un fragment d'une activité sans avoir à créer une nouvelle instance du fragment.

Un fragment qui a été créé précédemment.

7
sergio

Ajoutez simplement une méthode dans Fragment dont vous souhaitez recevoir les arguments, puis appelez la méthode dans Activity.

Code de l'activité:

 Activity's Code

Code du fragment:

 Fragment's Code

13
Will Tang

Pour ce faire, le moyen le plus simple consiste à définir une interface dans le fragment et à la mettre en œuvre dans l'activité. Ce lien devrait fournir un exemple détaillé sur la manière dont cela peut être accompli. https://developer.Android.com/training/basics/fragments/communicating.html

Je pense que l'élément clé que vous recherchez est ici: 

ArticleFragment articleFrag = (ArticleFragment)
      getSupportFragmentManager().findFragmentById(R.id.article_fragment);

if (articleFrag != null) {
    // If article frag is available, we're in two-pane layout...

    // Call a method in the ArticleFragment to update its content
    articleFrag.updateArticleView(position);
} else {
    // Otherwise, we're in the one-pane layout and must swap frags...

    // Create fragment and give it an argument for the selected article
    ArticleFragment newFragment = new ArticleFragment();
    Bundle args = new Bundle();
    args.putInt(ArticleFragment.ARG_POSITION, position);
    newFragment.setArguments(args);

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack so the user can navigate back
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(null);

    // Commit the transaction
    transaction.commit();
}

Essayez tout d'abord de récupérer le fragment en appelant findFragmentById (R.id.fragment_id). S'il n'est pas null, vous pouvez appeler la méthode que vous avez définie dans votre interface pour lui envoyer des données.

0
Zach Sogolow

Vous pouvez transférer n'importe quelles données via un paquet comme ci-dessous:

Bundle bundle = new Bundle();
bundle.putInt(key, value);
your_fragment.setArguments(bundle);

Ensuite, dans votre fragment, récupérez les données (par exemple, dans la méthode onCreate ()) avec:

Bundle bundle = this.getArguments();
if (bundle != null) {
        int myInt = bundle.getInt(key, defaultValue);
}
0
Karim