Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Need Expert sur le cycle des activités !

    17 mai 2013 à 10:29:29

    Bonjour,

    Je suis en ce moment sur un problème que je n'arrive pas à résoudre qui concerne les activités et plus particulièrement leurs cycles.

    Sommaire :

    • Schéma de l'application
    • Problème


    Schéma de l'application

    Voici le schéma du fonctionnement de mon application.


    Problème


    C doit fermer l'activité B, C (elle même) et A, quand C lance A

    • Le retour (bouton de retour sur le téléphone) de B doit revenir à A (sans le lancé) et B doit se fermer.
    • Le retour de C doit revenir à B (sans le lancé) et C doit se fermer.
    • Le retour de A doit revenir toujours à X (doit fermer toutes les activités A, B, C existantes).

    Je cherche donc une solution à ce problème. J'ai déjà essayé avec onActivityResult, startActivity, startActivityForResult et onKeyDown pour le bouton retour.

    Avec le mélange de ces méthodes je n'arrive pas à mettre en place une solution.

    Si on peut m'aider ;'(


    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2013 à 10:32:50

      Le retour de A doit revenir toujours à X (doit fermer toutes les activités A, B, C existantes). C'est surtout ça le problème ;D
      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2013 à 11:40:49

        UP : j'ai utilisé ceci sur l'activité A et cela marche. Mais est-ce propre ????

        public boolean onKeyDown(int keyCode, KeyEvent event) {
        
        		if (keyCode == KeyEvent.KEYCODE_BACK) {
        			Intent intent = new Intent(this, X.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        			finish(); 
        			startActivity(intent);
        		}



        -
        Edité par cleandroid22kh 17 mai 2013 à 11:41:23

        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2013 à 19:00:04

          On peut le faire de la maniere suivante

          Classe A

          Intent intent = new Intent(ClasseA.this, ClasseB.class);
          startActivity(intent);

          Classe B

          Intent intent = new Intent(ClasseB.this, ClasseC.class);
          startActivity(intent);
          finish();

          Classe C

          Dans un bouton retour on met ceci

          finish();

          Alors de la classe C on retournera dans la classe A


          • Partager sur Facebook
          • Partager sur Twitter
            21 mai 2013 à 8:00:50

            Oui mais le problème c'est que C doit lancer absolument une nouvelle activité de A (car des informations sont rechargées dessus). De plus avec le bouton "retour" du téléphone (je parle bien du bouton retour du téléphone :p) je ne peux plus faire  C retourne à  B  (bouton retour) qui retourne à A avec cette méthode.

            As-tu une autre solution ou est-ce que ma méthode est propre ?

            Je te remercie :)

            • Partager sur Facebook
            • Partager sur Twitter
              21 mai 2013 à 10:27:51

              Dans la classe C

              recuperation d'une instance de B

              Tu recuperre le click sur un bouton physique tu fais un return sur la classe B

              Si tu as un bouton retour dans ton activite C tu fais un finish de ta classe B alors tu reviendras sur A

              Dans la classe A

              override la methode on start

              mise a jour de l'adapter (si il y en a un)

              faire un notifyDataSetChanged (si ListView)

              Override de la methode onPause et de la saveInstanceState

              Pour plus d'info va voir le cycle de vie d'une activite dans la doc officielle

              Au vue des elements que tu nous donne on ne peut que rester general

              • Partager sur Facebook
              • Partager sur Twitter
                21 mai 2013 à 11:15:40

                C doit fermer l'activité B, C (elle même) et A, quand C lance A
                • Le retour (bouton de retour sur le téléphone) de B doit revenir à A (sans le lancé) et B doit se fermer.
                • Le retour de C doit revenir à B (sans le lancé) et C doit se fermer.
                • Le retour de A doit revenir toujours à X (doit fermer toutes les activités A, B, C existantes).

                Je pensais que ceci était suffisant x).

                Car faire des finish() et passé des informations avec le putExtra, je vois comment faire. Par exemple avec le bouton retour (du téléphone c'est à dire pas un bouton créer par l'utilisateur qui s’appelle retour mais :) de C qui va vers B (logique c'est un bouton retour) je repasse les informations ça c'est pas très compliqué je fais un finish() et je start un B.

                ça c'est une solution... autre que celle que j'ai présenté.

                Comme ça à l'écoute du bouton retour de A je reviendrais toujours vers X .

                Sinon on a du mal à se comprendre x).

                Ce que je veux dire c'est quoi la solution la plus propre ?

                car d'après ce que je comprends (ton dernier message)  quand je quitterais C (c'est à dire avec un finish()) et que je dois allez vers A.

                En gros dans ma classe  A je ferais un refresh de mes données dans la méthode onStart qui ajouteras ça avec la sauvegarde de l'ancienne activité  saveInstanceState ?

                • Partager sur Facebook
                • Partager sur Twitter
                  31 mai 2013 à 11:52:38

                  Il faut utiliser des extras pour ne pas perdre la donnée même après avoir kill l'application A. Dans le cas où des infos sont à transmettre sinon un simple intent marche

                  -
                  Edité par gruntsy 31 mai 2013 à 11:55:16

                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Android] Need Expert sur le cycle des activités !

                  × 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