2009-07-30 5 views
6

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 figure toujours dans les données regroupées de l'intention.Modifier les données du regroupement d'intention avant qu'une activité soit recréée après le changement d'orientation

Comment puis-je supprimer les données supplémentaires?

J'ai essayé les 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 affiché encore après l'orientation a changé, semble être l'intention utilisé n'est pas celui que je changé, mais l'original. La seule solution de contournement que j'ai trouvée consiste à enregistrer le showMessage en outre dans o nSaveInstanceState(). Existe-t-il un autre moyen? Ou est-ce le chemin à parcourir?

Répondre

20

La solution (simple) est:

Au lieu d'appeler

bundle.remove("showMessage"); 

J'utilise maintenant

getIntent().removeExtra("showMessage"); 

qui fonctionne comme prévu. Cela ressemble à getIntent(). GetExtras() renvoie une copie, pas une référence.

+0

Désolé, -1. 'onSaveInstanceState' est la bonne façon de le faire, comme l'a souligné @CommonsWare. –

9

Votre approche onSaveInstanceState() est la bonne réponse, AFAIK.

Questions connexes