Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Retour à une activité précise de la pile

Sujet résolu
    24 juin 2013 à 9:51:58

    Bonjour !   Tout est dans le titre, sauf les détails ;)   Mon application se compose de plusieurs activités, appelées en cascade. J'ai l'écran d'accueil, des écrans qui listent des éléments, puis un écran de détail. Dans la plupart des cas, j'ai un footer qui permet de passer à d'autres activités de listing, ainsi que de "revenir" à l'écran d'accueil. Seulement, comme j'ai ce pied de page sur certaines activités de détail, je me demandais s'il y avait moyen de faire un "double retour en arrière", voir peut-être plus simplement revenir suffisamment en arrière pour retrouver l'activité d'accueil, mais si possible en fermant les deux activités utilisées pour parvenir à cette sur laquelle l'utilisateur se trouve ? Simplement dans l'idée de ne pas avoir à relancer l'activité d'accueil.   Merci d'avance

    -
    Edité par Ymox 24 juin 2013 à 10:03:50

    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2013 à 10:44:43

      salut.

      Dans un premier temps je vais préciser que la philosophie d'Android (dans le sens habitude d'utilisation, fonction normale et bonnes pratiques) dit que le bouton "Back" permet de retourner à l'activité juste avant.

      Si tu veux faire :

      Activité A -> B -> C 

      puis (à partir de C) si tu appuis sur le bouton back, revient à A (B étant supprimé)

      ET (à partir de C) si tu appuis sur le bouton d'accueil de ton pied de page, revient à A (B étant supprimé).

      Alors lorsque tu passes de B à C et de C à D, tu dois appeler "finish" juste après le "startActivity".

      Mais si tu veux faire :

      Activité A -> B -> C 

      puis (à partir de C) si tu appuis sur le bouton back, revient à B.

      ET (à partir de C) si tu appuis sur le bouton d'accueil, revient à A en supprimant B.

      La c'est un peu plus compliqué car lorsque tu appuis sur "home" de ton pied de page, C devra se terminer mais terminer aussi B.

      Le moyen que j'utilise habituellement est celui-ci:

      Dans l'activité B:

      private void goToC() {
           Intent intent = new Intent(B.this, C.class);
           startActivityForResult(intent, 0);
      }
      
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          if(resultCode == C.CODE_GO_TO_HOME){ 
              //lorsque C se termine en appuyant sur le bouton d'accueil, on envoie le code indiquant à B de se terminer
              finish();
          }
      }

      Dans l'activité C:

      public static final int CODE_GO_TO_HOME = 20; //constante membre statique
      
      //écouteur du clic sur ton bouton home de ton pied de page
      findViewById(R.id.ton_bouton_home).setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
              setResult(CODE_GO_TO_HOME);
              finish();
          }
      });

      -
      Edité par freetibet 24 juin 2013 à 15:42:58

      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2013 à 16:08:54

        J'ai failli manquer le startActivityForResult(intent, 0), je ne comprenais pas pourquoi onActivityresult() n'était pas appelé…   Mais ça fonctionne au poil, merci beaucoup :)


        Question pour continuer la discussion : est-ce qu'il existe un moyen de pouvoir tuer toutes les applications de la pile en donnant l'ID de celle où "s'arrêter" ? Parce que c'est plus ou moins ce que je pourrais vouloir faire à terme. Là, j'ai donné un code à mon activité d'accueil, et on pourrait imaginer ensuite que, tant qu'on n'est pas dans l'activité qui possède le code de retour spécifié, on termine celle où on se trouve. Exprimé autrement, on identifierait l'application cible dans le code de retour de l'application source. Rassurez-moi, je ne suis pas le seul à y avoir pensé ?

        -
        Edité par Ymox 24 juin 2013 à 16:22:32

        • Partager sur Facebook
        • Partager sur Twitter

        [Android] Retour à une activité précise de la pile

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown