2010-05-03 17 views
1

Je suis sûr que cela aura été répondu, mais je me suis avéré incapable de le trouver. Alors s'il vous plaît excusez ma redondance. Ce que j'essaie de faire est d'émuler le bouton "Home" qui renvoie à l'écran d'accueil d'Android. Donc, voici ce qui me cause des problèmes:Comment quitter l'activité en cours sur l'écran d'accueil (sans utiliser le bouton "Accueil")?

  • J'ai 3 activités lanceur. Le premier (qui est connecté à l'icône de l'écran d'accueil) est juste une activité de configuration (protégée par mot de passe). Il ne sera pas utilisé par l'utilisateur (admin juste)
  • L'un des 2 autres (tous deux accessibles via un widget app) est une application de questionnaire. Je permets de revenir en arrière entre les questions via le bouton Retour ou un bouton de retour de l'interface graphique. Lorsque le questionnaire est terminé, je résume les réponses données et je fournis un bouton «Terminer» qui ramène l'utilisateur à l'écran d'accueil.

Pour l'application du questionnaire que j'utilise une seule activité (appelée ItemActivity) qui appelle lui-même (est-ce récursion aussi bien lors de l'utilisation des intentions?) Pour passer d'une question à l'autre:

Questionnaire.serializeToXML(); 
Intent i = new Intent().setClass(c, ItemActivity.class); 
if(Questionnaire.instance.getCurrentItemNo() == Questionnaire.instance.getAmountOfItems()) { 
    Questionnaire.instance.setCompleted(true); 
} else Questionnaire.instance.nextItem(); 
startActivity(i); 

La finale L'écran affiche quelque chose comme "Merci d'avoir participé" ainsi que le bouton précédemment décrit qui devrait vous ramener à l'écran d'accueil. Mais je ne comprends pas vraiment comment quitter l'activité correctement. J'ai par exemple utilisé this.finish(); mais cela fait étrangement apparaître l'écran "Merci" à nouveau. Alors, comment puis-je sortir en sautant à l'écran d'accueil?

Désolé pour l'inconvinience.
Cordialement,
Steff

Répondre

8

Il semble que ce qui se passe est que vous avez plusieurs copies de vos activités ouvertes en même temps. Chaque fois que vous démarrez une nouvelle instance d'une activité, vous ajoutez simplement de nouvelles à la pile - toutes les anciennes activités sont toujours là. Lorsque vous appelez le this.finish(), il vous montre uniquement l'activité la plus récente qui était ouverte. Je ne sais pas pourquoi c'est l'écran "Merci" puisque probablement il ne s'ouvre qu'à la fin, mais je ne suis pas complètement la séquence dans laquelle vos activités sont appelées.

Ce que vous pouvez essayer de faire c'est soit: 1) utiliser un finish() chaque fois après avoir démarré une nouvelle activité pour une question différente (de sorte qu'il n'y ait qu'une seule activité de question ouverte à la fois), soit 2) voir si vous pouvez utiliser le drapeau d'intention CLEAR_TOP. Cela démarre l'activité cible en tuant tout ce qui aurait pu être au-dessus dans la pile. Par exemple si vous avez des activités: A, B, C, C, C, C, C (etc pour chaque question), alors en commençant par A avec CLEAR_TOP tuera toutes les instances de B et C. Vous pouvez intégrer cela dans votre structure de programme en changeant le premier écran, l'utilisateur voit quand ils commencent un questionnaire. Cela afficherait un message «d'accueil» par défaut avec un bouton pour démarrer le questionnaire. Cependant, s'il a commencé avec une valeur particulière associée à l'intention, le message "Merci" s'affiche.

Si vous faites cela, puis une fois que vous finish() activité A, l'utilisateur sera retourné où ils étaient avant de commencer votre application - probablement l'écran d'accueil si elle a commencé avec un appwidget.

+0

Merci, je vais essayer. Après avoir lu votre réponse, je me demandais si je suivais une approche entièrement erronée de faire un questionnaire ... – stfn