2010-04-05 4 views
0

Dans mon application j'ai plusieurs activités, l'écran principal a 4 boutons qui commencent chacun une activité différente. Donc, l'un d'entre eux est une activité de recherche, une fois qu'il cherche, il vous montre une activité de résultat. Cette activité de résultat peut être atteint par d'autres activités, donc en quelque chose de général comme celui-ci:A propos du cycle de vie des activités

Main activity -> Search activity -> Result activity 

Main acitivty -> someother activity -> Result activity 

Maintenant, si je suis arrivé à cette activité de résultat et appuyez de nouveau une ou deux fois, et après appuyez sur la touche Accueil, il affichera l'écran d'accueil. Mais si je veux revenir à mon application en maintenant le bouton Accueil et en cliquant sur mon application, je reviendrai toujours à l'activité Résultat, quelle que soit l'activité que j'utilisais. Et si j'appuie de nouveau, cela me ramènera à l'écran d'accueil. Si je l'essaie à nouveau, cela me ramènera à l'activité Résultat. La seule façon d'éviter cela est de démarrer l'application en cliquant sur l'icône de l'application. Et cela m'amène à la dernière activité que j'utilisais et il se souvient de l'état, donc si je repasse à nouveau, cela ne me mène pas à l'écran d'accueil, mais plutôt à l'activité précédente. Pour illustrer ceci:

Main activity -> Search activity -> result activity --back--> Search activity --Home Button--> Home Screen --Hold Home and select the app --> Result activity --back--> Home Screen 

--Click application icon--> Search activity --back--> Main activity 

Une autre chose qui se passe est que si j'appuie sur le bouton Home pendant l'activité Résultat, et commencer l'application en cliquant sur l'icône, il me faudra à l'activité avant le le résultat d'un .

Pourquoi cela se produit-il? Des solutions de contournement?

+0

Comment vous lancent votre activies? Des indicateurs particuliers que vous utilisez dans vos intentions? –

+0

Oui, j'ajoute un drapeau pour démarrer l'activité Résultat, et je passe aussi quelques données. Quelque chose comme ceci: Intention intention = new Intent (this, Result.class); intention.putExtra ("RESULT", aString); intention.addFlags (R.id.flag_search); startActivity (intention); –

+0

En regardant dedans, la méthode intent.addFlags (R.id.flag_search) provoque cela, en commentant la ligne ou en utilisant n'importe quel int au lieu de R.id.flag_search résout le problème. Hmmm maintenant pourquoi je ne peux pas y stocker mes drapeaux? Dois-je utiliser une classe statique pour stocker les différents drapeaux? –

Répondre

2

Votre intention.addFlags utilise votre propre indicateur "custom" pour envoyer une valeur à votre nouvelle activité (R.id.flag_search)? Je ne suis pas sûr que ce soit soutenu ou l'utilisation prévue des drapeaux et des activités. Les drapeaux sont documentés ici:

http://developer.android.com/intl/de/reference/android/content/Intent.html#setFlags%28int%29

+0

Merci! C'était le problème. Je suppose que je dois utiliser une autre méthode pour différencier mes activités. Donc, la seule façon dont je peux penser serait en utilisant Intent.putExtra, ou y a-t-il un autre moyen? –

+0

Je crois que Intent.putExtra est la voie à suivre pour tous les besoins d'envoi de données entre les activités. Bonne chance! – mikeplate

0

Définissez alwaysRetainTaskState sur true.

+0

Cela ne fait-il pas le * contraire * de ce qui est désiré? De plus, la documentation dit "cet attribut n'a de sens que pour l'activité racine d'une tâche, il est ignoré pour toutes les autres activités". –

+0

Je l'ai essayé quand même mais la même chose arrive. –