Qu'est-ce qu'une bundle
dans une application Android? Quand l'utiliser?
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:
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.)
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");
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.
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.
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);
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.
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.
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 :)
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 ...........
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");
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
.