Comment quitter l'activité en cours à l'écran d'accueil (sans utiliser le bouton « Home »)?

StackOverflow https://stackoverflow.com/questions/2758786

Question

Je suis sûr que cela a été répondu, mais je l'ai prouvé incapable de le trouver. Alors, s'il vous plaît excuser mon licenciement.

Ce que je suis en train de faire est émulant le bouton « Home », qui nous ramène à l'écran d'accueil d'Android. Voici donc ce qui me cause des problèmes:

  • J'ai 3 activités lanceur. Le premier (qui est relié à l'icône de l'écran d'accueil) est juste un (mot de passe protégé) l'activité de configuration. Il ne sera pas utilisé par l'utilisateur (juste admin)
  • un de l'autre 2 (tous deux accessibles via un widget app) est une application de questionnaire. Je permet de revenir en arrière entre les questions via le bouton Précédent ou un bouton de retour de l'interface graphique ainsi. Lorsque le questionnaire est terminé, je résume les réponses données et fournir un bouton « Terminer » qui devrait prendre le dos de 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);

L'écran final montre quelque chose comme « Merci de votre participation », ainsi que le bouton précédemment décrit ce qui devrait prendre un retour à l'écran d'accueil. Mais je ne comprends pas vraiment comment sortir l'activité correctement. J'ai par exemple utilisé this.finish(); mais cela fait étrangement l'écran « Merci » à nouveau. Alors, comment puis-je sortir juste en arrière de saut à l'écran d'accueil ??

Désolé pour le inconvinience.
Cordialement,
Steff

Était-ce utile?

La solution

On dirait 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é que vous êtes simplement en ajoutant de nouvelles à la pile - toutes les activités anciennes sont toujours là. Lorsque vous appelez this.finish(), il est juste de vous montrer la suivante la plus récente activité était ouverte. Je ne sais pas pourquoi c'est le « Merci » écran depuis probablement que seul obtient ouvert à la fin, mais je ne suis pas complètement la séquence de vos activités s'appelés.

Ce que vous pouvez faire pour le corriger est soit: 1) utiliser un finish() chaque fois après le démarrage d'une nouvelle activité pour une autre question (de sorte qu'il n'y a que jamais une activité question ouverte à la fois), ou 2) si vous pouvez utiliser l'intention CLEAR_TOP du pavillon. Cela commence l'activité cible tout en tuant tout ce qui aurait pu être au-dessus de la pile. Par exemple, si vous avez des activités: A, B, C, C, C, C, C (etc pour chaque question), en commençant alors A avec CLEAR_TOP va tuer tous les cas de B et C. Vous pouvez adapter ceci dans votre structure de programme en changeant le premier écran, l'utilisateur voit quand ils commencent un questionnaire. Cela affichera un message « de bienvenue » par défaut avec un bouton pour démarrer le questionnaire. Cependant, si elle est commencé avec une valeur particulière fournie avec l'intention, il affiche le message « Merci ».

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top