web-dev-qa-db-fra.com

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

Qu'est-ce qu'une bundle dans une application Android? Quand l'utiliser?

249
User

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 passées en faisant:

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

Vous pouvez trouver plus d'infos sur:

257
samtherock

Je dois ajouter que les activités utilisent les ensembles pour se transmettre des données à eux-mêmes à l'avenir. 

Lorsque l'écran pivote ou qu'une autre activité est démarrée, 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) est appelé. Lorsque la première instance d'activité est créée, l'ensemble est null; et si le paquet n’est pas nul, l’activité continue certaines affaires lancées par son prédécesseur.

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

L'anti-pattern le plus courant, cependant, suppose que 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 de "création d'activité en rotation", mais cela n'empêchera pas les bogues liés au redémarrage, mais 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 la documentation.)

64

Transmettez les données entre les activités en utilisant les objets Bundle et Intent.


Votre première création d'un objet Bundle

Bundle b = new Bundle();

Ensuite, associez les données de chaîne stockées dans anystring à la clé d'ensemble "myname".

b.putString("myname", anystring);

Maintenant, créez un objet Intent

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 par la première activité

Intent in = getIntent();

Maintenant, vous devez obtenir les données du paquet

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

Une Bundle est très semblable à un objet Java Map qui mappe les clés String à des valeurs. Il est utilisé pour transmettre des informations entre des activités et d'autres composants d'application. Il est également utilisé par la structure pour capturer et restaurer les informations d'état.

La raison pour laquelle Android n'utilise pas les anciens et simples objets Map est que Map est trop flexible; il peut contenir des objets (tels que, par exemple, des flux d'E/S) qui ne peuvent pas être sérialisés. L'API Bundle limite les types d'objets pouvant être ajoutés à un ensemble de telle sorte que son contenu soit garanti pour être sérialisable. Le framework Android s'appuie sur cette propriété.

Je vous suggère de lire la documentation sur Principes de base de l’application . Cela explique, entre autres choses, quels sont les ensembles et les intentions et à quoi ils servent.

36
Ted Hopp

Les ensembles 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 sont informées. Une intention peut contenir un ensemble afin que vous puissiez envoyer des données supplémentaires avec l'intention.

Les bundles sont des mappages clé-valeur, ils ressemblent donc à un hachage, mais ils ne sont pas strictement limités à un seul mappage d'objet String/Foo. Notez que seuls certains types de données sont considérés comme "parcellaires" et qu'ils sont explicitement définis dans l'API Bundle.

14
scriptocalypse

Il suffit de créer un paquet,


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 le "this_is_the_next_class.class"

Vous pouvez récupérer les éléments comme ceci.

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

Bundle est utilisé pour transmettre des données entre les activités. Vous pouvez créer un ensemble, le transmettre à l’intention qui lance l’activité, qui peut ensuite être utilisée à partir de l’activité cible. 

5
GSree

Bundle: - Un mappage de valeurs String vers différents types de Parcelable.

Bundle est généralement utilisé pour transmettre des données entre diverses activités d’Android.

lorsque nous appelons onPause (), puis onStop (), puis inversement onStop () à onPause ().

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

3
Ahmed Ali

bundle est utilisé pour partager des données entre des activités, et pour enregistrer l’état de l’application dans la méthode oncreate () afin que cette application puisse savoir où elle a été arrêtée ... J'espère que cela vous aidera :)

2
Sandip Lawate

utilisation d’un ensemble d’envoyer des données d’une activité à une autre à l’aide de l’objet intention; Les ensembles contiennent les données qui peuvent être de tout type.

Maintenant, je vous explique comment créer un ensemble transmettant des données entre deux activités.

Étape 1: 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: Deuxième activité

Intent in=getIntent();

Bundle b=in.getExtras();

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

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

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

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

tel que le texte dans un widget EditText ou la position de défilement d'un ListView.

0
Ajay Takur