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 :

Mettre a jour fragment depuis activity


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 47
    Points
    47
    Par défaut Mettre a jour fragment depuis activity
    Bonjour,
    Dans mon application j'ai 4 fragments dont certains qui contiennent des Listview remplient depuis ma base de données.
    Au chargement de mon fragment "Messages", je vais donc récupérer dans ma base de donnée les messages.
    Si ça ne retourne rien j'ai un textView que je rend visible ("Vous n'avez aucun message"), et rend invisible ma listview dans mon fichier xml.
    Je fait l'inverse si ça retourne quelque chose.

    Le problème est le suivant.
    Le fragment se charge quand je suis dessus.
    Dans une activity je rajoute des messages.
    Quand je quitte l'activity je retombe sur mon fragment. Rien ne se met à jour, ni la listview, ni mon histoire du TextView qui s'affiche ou non.

    Auriez vous une solution pour que depuis mon activity je force le rechargement du fragment ?


    Merci d'avance !

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    startActivityForResult est bien appelé ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    Merci de votre réponse.
    Je ne connaissait pas cette méthode.
    J'ai placé dans mon activité ou j'ajoute des messages le code ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            MYACTIVITY_REQUEST_CODE = 101;
            intent = new Intent(VueMessages.this, MainActivity.class);
            setResult(Activity.RESULT_OK);
     
            startActivityForResult(intent, MYACTIVITY_REQUEST_CODE);
    Dans ma MainActivity ou j'ai mon fragment avec la listview j'ai mis cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        if ((resultCode == Activity.RESULT_OK))
            adapter.notifyDataSetChanged()
    }
    Les données de la Listview du fragment se refresh bien mais j'atterrie sur le premier fragment, or je veux que ca retombe sur le deuxième, comment faire ?
    Apres je ne comprends pas trop le principe du startActivityForResult()... Vu que dans ce cas la ça revient juste à ouvrir l'activity (startActivity), quelles différences ?

    Merci d'avance !

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    A.startActivityForResult(B) = A.startActivity(B) avec attente (et réception) de la réponse de B (dans A.onActivityResult).
    Le "requestCode" passé est privé à A et lui permet de savoir de quel "startActivityForResult" on vient dans onActivityResult.

    En gros le code de A c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    ....
    private static final int   ACTIVITY_B_REQUEST_CODE = 228743;
    ...
    ...
    Intent intentForB = new Intent(this,B.class); // avec des données pour B
    startActivityForResult(intentForB ,ACTIVITY_B_REQUEST_CODE);
    ...
     
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == ACTIVITY_B_REQUEST_CODE) {
           // ça vient bien de chez nous...
           if (resultCode == RESULT_OK) {
               // il y a de la donnée dans data !
           } else {
               // le truc a été cancelled par l'utilisateur, pas besoin de refresh
           }
        } else {
           // ça vient pas de chez nous... on passe au parent:
           super.onActivityResult(requestCode,resultCode,data);
        }
    }

    Je ne connais pas la structure logique de la navigation de ton application (un petit dessin aiderait certainement).
    Mais l'activité peut tout à fait changer de fragment si elle le souhaite....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    Dans mon cas pourquoi utiliser startActivityForResult si startActivity revient au même ?
    En effet si je fais startActivity, naturellement mes fragments vont être rechargé et les listviews associées également puisque l'activité auquelle sont ratachés tout les fragment est relancée.

    Voici un schéma explicatif de mon problème :

    Nom : 20151217_193919.jpg
Affichages : 588
Taille : 568,3 Ko


    Ce qu'il me faudrait c'est donc faire un adapter.notifyDataSetChanged(); sur mon fragment quand je retombe dessus pour qu'il refresh la listview. Ca existe pas une sorte de onResume mais pour les fragments ?

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben si le startActivityForResult sert à quelque chose puisque l'activité initiale reçoit l'information qu'il s'est passé quelque chose directement.

    Dans un "startActivity", l'activité A ne reçoit jamais l'information qu'on vient de B et que B a effectué un changement. Il faudrait alors tripatouiller un truc dans le onResume pour vérifier que quelque chose n'a pas changé depuis le dernier affichage.
    Dans un "startActivityForResult", l'activité A sait tout de suite que quelque chose a changé dans le onActivityResult.


    A noter que le fragment peut recevoir lui-même le onActivityResult
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    En fin de compte j'ai regardé sur un autre fragment qui lui se mettait à jour alors que c'était le même principe. Il s'agissait en fait d'une ListFragment. Donc j'ai repris la même base et maintenant mon fragment Messages se met à jour !

    Merci tout de même de tes explications qui serviront sûrement à d'autres !!

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

Discussions similaires

  1. [VB6]mettre a jour textbox depuis la lecture d'un fichier ?
    Par Slumpy dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/06/2006, 17h28
  2. Mettre à jour une table depuis une autre
    Par snubi dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 19h28
  3. Réponses: 4
    Dernier message: 01/10/2005, 17h59
  4. [MySQL] Mettre a jour un serveur MySQL depuis un autre
    Par baddounet dans le forum Administration
    Réponses: 6
    Dernier message: 01/09/2005, 15h09

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