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:


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");

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


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.


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.


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

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.


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.


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 :)


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 ...........


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.


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");

1
Vous voudrez peut-être également en savoir plus sur les exemples minimaux, complets et vérifiables .
Daniel Corzo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.