Qu'est-ce qu'un «bundle» dans une application Android

Réponses:

279

Les bundles sont généralement utilisés pour transmettre des données entre diverses activités Android. Cela dépend du type de valeurs que vous souhaitez transmettre, mais les ensembles peuvent contenir tous les types de valeurs et les transmettre à la nouvelle activité.

Vous pouvez l'utiliser comme ceci:

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

Vous pouvez obtenir les valeurs transmises en faisant:

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

Vous pouvez trouver plus d'informations sur:

samtherock
la source
3
pourquoi ne pas utiliser directement System.object et cast?
lovespring
79

Passez des données entre les activités à l'aide de Bundleet d' Intentobjets.


Votre premier créer un Bundleobjet

Bundle b = new Bundle();

Ensuite, associez les données de chaîne stockées dans anystringavec la clé de l'ensemble"myname"

b.putString("myname", anystring);

Maintenant, créez un Intentobjet

Intent in = new Intent(getApplicationContext(), secondActivity.class);

Passer l'objet bundle bà l'intention

in.putExtras(b);

et commencer la deuxième activité

startActivity(in);

Dans la deuxième activité, nous devons accéder aux données transmises depuis la première activité

Intent in = getIntent();

Maintenant, vous devez obtenir les données du bundle

Bundle b = in.getExtras();

Enfin, obtenez la valeur des données de chaîne associées à la clé nommée "myname"

String s = b.getString("myname");
mahalakshmi
la source
C'EST VRAIMENT UNE BONNE RÉPONSE VERBOSE, MERCI POUR CELA.
Abhishek Garg
68

Je dois ajouter que les bundles sont utilisés par les activités pour se transmettre des données à l'avenir.

Lorsque l'écran pivote ou lorsqu'une autre activité démarre, la méthode protected void onSaveInstanceState(Bundle outState)est appelée et l'activité est détruite. Plus tard, une autre instance de l'activité est créée et public void onCreate(Bundle savedInstanceState)appelée. Lorsque la première instance d'activité est créée, le bundle est nul; et si le bundle n'est pas nul, l'activité poursuit une activité démarrée par son prédécesseur.

Android enregistre automatiquement le texte dans les champs de texte, mais il ne sauvegarde pas tout, et des bugs subtils apparaissent parfois.

L'anti-modèle le plus courant, cependant, suppose que cela onCreate()ne fait que l'initialisation. C'est faux, car il faut aussi restaurer l'état.

Il existe une option pour désactiver ce comportement "recréer une activité lors de la rotation", mais cela n'empêchera pas les bogues liés au redémarrage, cela les rendra plus difficiles à mentionner.

Notez également que la seule méthode dont l'appel est garanti lorsque l'activité va être détruite est onPause(). (Voir le graphique du cycle de vie des activités dans les documents.)

18446744073709551615
la source
Pourquoi utiliser un bundle si nous pouvons simplement utiliser une cartographie? Merci Ted!
Ruchir Baronia
4
Le bundle n'est pas uniquement utilisé par Activity. Il est également utilisé par Fragment pour conserver les états après rotation.
Kai Wang
48

A Bundleressemble beaucoup à un Mapobjet Java qui mappe les Stringclés aux valeurs. Il est utilisé pour transmettre des informations entre les activités et d'autres composants d'application. Il est également utilisé par le framework pour capturer et restaurer les informations d'état.

La raison pour laquelle Android n'utilise pas de vieux Mapobjets simples est que Mapc'est trop flexible; il peut contenir des objets (comme, par exemple, des flux d'E / S) qui ne peuvent pas être sérialisés. L' BundleAPI restreint les types d'objets qui peuvent être ajoutés à un bundle de telle sorte que le contenu du bundle est garanti pour être sérialisable. Le cadre Android repose sur cette propriété.

Je vous suggère de lire la documentation sur les principes fondamentaux de l'application . Cela explique, entre autres, ce que sont les bundles et les intentions et à quoi ils servent.

Ted Hopp
la source
14

Les bundles peuvent être utilisés pour envoyer des données arbitraires d'une activité à une autre par le biais d'intentions. Lorsque vous diffusez une Intention, les Activités intéressées (et les autres BroadcastRecievers) en seront informés. Une intention peut contenir un ensemble afin que vous puissiez envoyer des données supplémentaires avec l'intention.

Les bundles sont des mappages de valeurs-clés, donc en quelque sorte ils sont comme un hachage, mais ils ne sont pas strictement limités à un seul mappage d'objets String / Foo. Notez que seuls certains types de données sont considérés comme "parcelables" et ils sont explicitement énoncés dans l'API Bundle.

scriptocalypse
la source
C'est la seule réponse à ce jour pour vraiment aborder la question du PO, à savoir qu'est-ce qu'un bundle. stackoverflow.com/a/6236801/1588163 donne plus d'informations.
clapas du
Pourquoi utiliser un bundle si nous pouvons simplement utiliser une cartographie? Merci!
Ruchir Baronia
@RuchirBaronia, il n'y a aucune raison particulière d'utiliser un bundle, sauf si vous avez l'intention de le transmettre à une partie de l'API Android qui nécessite des objets Bundle.
scriptocalypse
8

Créez simplement un bundle,


Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);

DANS "this_is_the_next_class.class"

Vous pouvez récupérer les éléments comme celui-ci.

Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
Bala Prasanna
la source
5

Le bundle est utilisé pour transmettre des données entre les activités. Vous pouvez créer un ensemble, le transmettre à Intent qui démarre l'activité qui peut ensuite être utilisée à partir de l'activité de destination.

GSree
la source
3

Bundle: - Un mappage des valeurs de chaîne à différents types de parcelles.

Le bundle est généralement utilisé pour transmettre des données entre diverses activités d'Android.

lorsque nous appelons onPause () puis onStop () puis dans l'ordre inverse onStop () à onPause ().

Les données enregistrées que le système utilise pour restaurer l'état précédent sont appelées "état d'instance" et sont une collection de paires clé-valeur stockées dans un objet Bundle.

Ahmed Ali
la source
Une cartographie, c'est la nature du bundle.
BollMose
2

le bundle est utilisé pour partager des données entre les activités et pour enregistrer l'état de l'application dans la méthode oncreate () afin que l'application sache où elle a été arrêtée ... J'espère que cela aide :)

Sandip Lawate
la source
0

utilisation de l'envoi groupé de données d'une activité à une autre à l'aide d'un objet intentionnel; Le bundle contient les données qui peuvent être de tout type.

Maintenant, je dis que comment créer un paquet en passant des données entre deux activités.

Étape 1: Sur la première activité

Bundle b=new Bundle();

b.putString("mkv",anystring);

Intent in=new Intent(getApplicationContext(),secondActivity.class);

in.putExtras(b);

startActivity(in);

Étape 2: Sur la deuxième activité

Intent in=getIntent();

Bundle b=in.getExtras();

String s=b.getString("mkv");

Je pense que cela vous est utile ...........

Mahendra Kumar Verma
la source
0

Le bundle ne sert pas uniquement à transférer des données entre deux composants différents, mais il est surtout utilisé pour restaurer les valeurs stockées avant que l'activité ne soit détruite dans une nouvelle activité.

comme le texte d'un EditTextwidget ou la position de défilement d'un fichier ListView.

Ajay Takur
la source
0

Première activité:

String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());

Deuxième activité:

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");
Tonnelier
la source
1
Vous voudrez peut-être également en savoir plus sur les exemples minimaux, complets et vérifiables .
Daniel Corzo