IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Problème de navigation entre activités


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 179
    Par défaut Problème de navigation entre activités
    Bonjour,
    Précisons tout d'abord que si je ne débute pas en informatique, je commence seulement le développement Android/Java :-)
    Je me pose des questions sur la gestion de la navigation entre activités. je vous donne les éléments :
    MainActivity appelle Activity_A qui appelle Activity_B qui peut appeler Activity_C
    MainActivity peut appeler Activity_B qui peut appeler Activity_C
    MainActivity peut appeler Activity_C
    Les activités A, B et C disposent du menu permettant de revenir à MainActivity
    L'appel d'une activité se fait par la méthode startActivityForResult() ce qui implique que chaque activité dispose de la méthode onActivityResult() et donc que lorsque Activity_C doit remonter sur MainActivity elle doit passer par les méthodes onActivityResult() de Activity_B, puis de Activity_A et enfin de MainActivity.
    Dernière précision : Activity_C doit fournir un résultat à MainActivity et ce que l'on y accède directement ou indirectement.
    Intuitivement cela me paraît bien lourd, d'où ma question :
    Est-ce que c'est comme ça qu'il faut procéder ou est-ce qu'il y a un moyen plus optimal, voire plus propre de faire ?
    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Bonjour,

    La méthode startActivityForResult() entre Activity_A et Activity_B est utilisée quand tu attends un résultat de Activity_B pour Activity_A (par exemple, A appelle B qui est une liste, et tu souhaites récupérer les éléments cliqués). En aucun cas, cette méthode implique plus de 2 activités. Donc Activity_C qui passe onActivityResult() de Activity_B et de Activity_A, ce n'est pas une bonne pratique.


    Il faudrait que tu expliques le contexte de ce que tu souhaites faire pour qu'on puisse te donner une solution plus viable.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 179
    Par défaut
    Citation Envoyé par Turvy Voir le message
    Bonjour,

    La méthode startActivityForResult() entre Activity_A et Activity_B est utilisée quand tu attends un résultat de Activity_B pour Activity_A (par exemple, A appelle B qui est une liste, et tu souhaites récupérer les éléments cliqués). En aucun cas, cette méthode implique plus de 2 activités. Donc Activity_C qui passe onActivityResult() de Activity_B et de Activity_A, ce n'est pas une bonne pratique.


    Il faudrait que tu expliques le contexte de ce que tu souhaites faire pour qu'on puisse te donner une solution plus viable.
    Bonjour,
    Merci pour ta réponse.
    Le contexte est celui d'une application de gestion sur tablette sous Android. L'activité principale offre (après login) un menu permettant d'accéder à la liste des personnes soit directement soit en passant par la fonction (choix d'une fonction dans une liste et appel de l'activité Liste avec la fonction en paramètre).
    L'activité Liste donne accès à l'activité Modification d'une personne.
    Chacune de ces activités dispose d'un menu réduit aux items Accueil et Logout.
    Si je lance par exemple l'activité Modification depuis l'activité Liste avec la méthode startActivity(), comment est-ce que je fais pour sur le clic du bouton Annuler ou sur le clic de l'item Accueil revenir à la Liste dans le premier cas et à MainActivity dans le second ?
    Il m'a paru aberrant de relancer un startActivity() pour relancer MainActivity ou Liste car cela allait remettre dans la pile des appels un MainActivity ou Liste qui du coup ne seraient jamais dépilés !
    Question connexe, est-ce qu'il y aurait un moyen de visualiser la pile des appels sous Android Studio ou tout autre moyen ?
    Voilà j'espère avoir été suffisamment précis.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Si je lance par exemple l'activité Modification depuis l'activité Liste avec la méthode startActivity(), comment est-ce que je fais pour sur le clic du bouton Annuler ou sur le clic de l'item Accueil revenir à la Liste dans le premier cas et à MainActivity dans le second ?
    Ton bouton Annuler est juste un back, donc il te suffit d'appeler super.onBackPressed(), et pour rappeler ta MainActivity, tu devras bien passer par un startActivity(). Mais en rajoutant un flag comme FLAG_ACTIVITY_CLEAR_TOP, ton activité ne sera pas recréée. Ou plus simplement encore, tu as la possiblité de définir MainActivity comme "singleInstance" dans le Manifest. Je te conseille de lire avec attention ceci : https://developer.android.com/guide/...and-back-stack. C'est le même principe que la flèche Home de la toolbar d'autrefois.

    Pour le moment, tu peux appeler Modification avec un startActivityForResult() pour que la liste se rafraichisse dans onActivityResult() (si visuellement c'est nécessaire), mais c'est tout.


    Question connexe, est-ce qu'il y aurait un moyen de visualiser la pile des appels sous Android Studio ou tout autre moyen ?
    Aucune idée, à défaut, tu peux toujours mettre des logs dans les onStop et onDestroy de chacune des activités, et suivre leur cycle de vie dans le terminal.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 179
    Par défaut
    Citation Envoyé par Turvy Voir le message
    Ton bouton Annuler est juste un back, donc il te suffit d'appeler super.onBackPressed(), et pour rappeler ta MainActivity, tu devras bien passer par un startActivity(). Mais en rajoutant un flag comme FLAG_ACTIVITY_CLEAR_TOP, ton activité ne sera pas recréée. Ou plus simplement encore, tu as la possiblité de définir MainActivity comme "singleInstance" dans le Manifest. Je te conseille de lire avec attention ceci : https://developer.android.com/guide/...and-back-stack. C'est le même principe que la flèche Home de la toolbar d'autrefois.

    Pour le moment, tu peux appeler Modification avec un startActivityForResult() pour que la liste se rafraichisse dans onActivityResult() (si visuellement c'est nécessaire), mais c'est tout.



    Aucune idée, à défaut, tu peux toujours mettre des logs dans les onStop et onDestroy de chacune des activités, et suivre leur cycle de vie dans le terminal.
    Bonjour,
    Excellent c'est typiquement ce qu'il me faut ! Merci.
    Il est probable que j'ai mal cherché, mais dans aucun des supports que j'ai pu trouver je n'ai rencontré cette fonctionnalité, je vais donc regarder tout ça de près.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 179
    Par défaut
    Bonjour,
    je n'ai pas réussi à faire fonctionner le flag FLAG_ACTIVITY_CLEAR_TOP, par contre l'option singleInstance, elle fonctionne parfaitement ce qui a eu pour conséquence de simplifier de façon importante le code dans les différentes activités.
    Donc encore merci pour cette proposition.
    Je fais face maintenant à un problème d'appels au web service qui me fournit les données, cela se manifeste par un rafraîchissement aléatoire des données. J'ai posté un nouveau message en ce sens, donc si éventuellement tu avais le temps d'y jeter un coup d'oeil ;-)
    J'ai trouvé une astuce pour palier au problème, mais l'expérience m'a montré que les astuces ça n'est jamais une bonne solution, cela ne fait que masquer le problème, cela ne le résout pas !
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. navigation entre activité
    Par chlock62 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 02/04/2014, 17h39
  2. Réponses: 1
    Dernier message: 14/05/2013, 14h14
  3. Problème de navigation entre les forms
    Par elrenzo dans le forum VB.NET
    Réponses: 4
    Dernier message: 14/10/2009, 14h29
  4. problème de navigation entre les formulaires
    Par Tchen33 dans le forum 4D
    Réponses: 1
    Dernier message: 13/04/2009, 12h21
  5. Problème de navigation entre forms vb.neyt
    Par vérokit dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/03/2008, 07h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo