Modifier les données du groupe d'intentions avant qu'une activité ne soit recréée après le changement d'orientation
-
05-07-2019 - |
Question
J'ai une notification qui démarre mon activité et transmet un message à l'aide de la fonction putExtra () de l'intention. Le message est ensuite affiché à l'utilisateur dans la fonction onCreate de l'activité. Lorsque l'application est redémarrée en raison d'un changement d'orientation, le message s'affiche à nouveau car il fait toujours partie des données groupées de l'intention.
Comment puis-je supprimer les données supplémentaires?
J'ai essayé les solutions suivantes:
Bundle bundle = getIntent().getExtras();
if (bundle.getBoolean("showMessage")) {
// ... show message that is in bundle.getString("message")
// remove message
bundle.remove("showMessage");
}
Mais le message sera toujours affiché après la modification de l'orientation. Il semble que l'intention utilisée ne soit pas celle que j'ai modifiée, mais celle d'origine. La seule solution de contournement que j'ai trouvée consiste à enregistrer le showMessage en outre dans o nSaveInstanceState ()
.
Y a-t-il un autre moyen? Ou est-ce la voie à suivre?
La solution
La solution (simple) est la suivante:
Au lieu d'appeler
bundle.remove("showMessage");
J'utilise maintenant
getIntent().removeExtra("showMessage");
qui fonctionne comme prévu. On dirait que getIntent (). GetExtras () renvoie une copie et non une référence.
Autres conseils
Votre approche onSaveInstanceState ()
est la bonne réponse, autant que je sache.