Comment faire pour effacer l'Intention qui a commencé l'Activité?
Au début de l'Activité est lancée par une Intention et que quelque chose est fait à cette Intention.
Quand j'ai changer l'orientation de mon Activité, il est rechargé et l'Intention est passé à l'Activité.
Comment puis-je clair que l'Intention d'empêcher l'Activité de l'utiliser à nouveau?
J'ai essayé setIntent(null)
, mais sans résultat.
- pixel doit unaccept l'clairement une mauvaise réponse et accepter @dcg à la place. Qui m'aurait sauvé environ une heure de travail va dans la mauvaise voie. Voir Dianne Hackborn post sur comment setIntent est un mensonge: groups.google.com/forum/#!msg/android-développeurs/vrLdM5mKeoY/...
- Voir si cela aide - stackoverflow.com/a/19820057/313042
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. Cela m'a aidé.
Peut-être vous devez également utiliser onSaveInstanceState(Bundle outState) et d'ajouter des données supplémentaires pour le bundle alors en vigueur n'est pas nulle, pas sûr.
Ne pas utiliser
setIntent(null)
. Il semble que, même s'il peut marcher parfois, sous certaines conditions à l'origine l'intention de revenir.au Lieu de cela, appelezsetIntent()
avec une simple intention, n'a pas d'action, des données ou des services supplémentaires, tels quenew Intent(Context, Class)
.En effet, l'utilisation de
setIntent()
était pas une bonne conception d'API décision en premier lieu. Au lieu de cela, comme dcg noté, assurez-vous seulement de vérifier votre intention la première fois, lors de votresavedInstanceState
est toujours null.savedInstanceState == null
est GÉNIAL!!! Cela m'a aidé à différencier si je commençais mon MainActivity à partir de l'écran de lancement ou une intention reçues par l'ouverture d'une pièce jointe à un courriel. +1Si votre intention est envoyé à votre activité avec une action (avec setAction), il suffit de faire ce qui suit lorsque vous recevez l'intention, pour éviter les manipulations multiples de cette intention lorsque l'écran pivote :
Vieux post, mais quelqu'un pourrait l'utiliser.
Ne pas perdre de temps, si votre application est reprise, l'objectif sera de nouveau là.
Utiliser le départ l'intention de l'Activité "Reprendre", et il suffit d'ajouter une valeur supplémentaire au
Et à chaque fois que votre application reprend, vérifier si dispose déjà de cette valeur:
facile
Intent
d'une manière différente, non pas dans la mémoire. Vous ne faites qu'ajouter cette valeur au moment de l'exécution. Lorsque l'activité est tué, le système récupère l'originalIntent
de nouveau.Si vous définissez l'intention à l'action, vous pouvez le désactiver avec
getIntent().setAction("");
Par exemple dans
onCreate(...)
:Ce sera clairement l'action, sinon, elle sera appelée à chaque fois que vous faites pivoter l'appareil.
Ma suggestion serait de basculer ce avec une variable booléenne pour vérifier la météo de votre activité est d'abord créé ou non.
Sinon, vous pouvez regarder à votre méthode onCreate, autant que je sache, ce n'est exécuté, lorsque l'activité est d'abord créé.
onRetainNonConfigurationInstance()
passer l'état à partir de l'ancienne activité de la nouvelle.Dans mon cas, j'ai besoin de configurer les données à null:
intent.putExtra(YourKey,""); //reset the value to knknown
setIntent(intent);
Même après avoir manuellement de compensation à l'Intention et à l'Intention d'extras après qu'ils ont été analysés, il semble que l'Activité.getIntent() retournera toujours l'Intention originale qui a débuté l'Activité.
Pour contourner ce problème, je recommande quelque chose comme ceci :
De cette façon, il y a un mécanisme de vidage de l'Intention initiale, tout en conservant explicitement la capacité de conserver certaines parties de l'Intention originale /Intention extras.
Noter que je n'ai pas testé toutes les Activités de lancement modes.