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.
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.
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);
}