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

Composants graphiques Android Discussion :

Update Textview dans fragment depuis activity


Sujet :

Composants graphiques Android

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut Update Textview dans fragment depuis activity
    Bonjour à tous,

    Je rencontre un soucis lors de la mise à jour d'une Textview dans un fragment.

    Si je dédie un bouton avec uniquement la ligne 54 + 55 pour modifier le texte, cela fonctionne parfaitement.
    Par contre si je demande la mise à jour après plusieurs opérations, cela plante. - La mise à jour de la Textview est à la ligne 54 !

    Merci d'avance


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
     public void  Bt_verif_verif(View view){
     
            String plaques = Et_verif_plaques.getText().toString();
            String[] columns = {TableData.Table_plaques.MARQUE, TableData.Table_plaques.MODELE, TableData.Table_plaques.COULEUR, TableData.Table_plaques.MOTIF, TableData.Table_plaques.LIEU,
                    TableData.Table_plaques.DATE_TIME};
            String Col_arg = TableData.Table_plaques.PLAQUES;
            String Arguments = Et_verif_plaques.getText().toString();
     
            if (plaques.isEmpty()) {
                return;
            }
     
            DatabaseOperations DOP = new DatabaseOperations(context);
            Cursor CR = DOP.getInfos(DOP, columns, Table_name, false, Col_arg, Arguments);
     
            int nbre_vu = CR.getCount();
     
            Vehicule_fragment Fr = new Vehicule_fragment();
            FragmentTransaction FT = FM.beginTransaction();
            FT.add(R.id.frag_id, Fr, "F1");
            FT.addToBackStack("Bt_verif_verif");
            FT.commit();
     
     
            String vehicule = "",modele;
     
            while (CR.moveToNext()) {
     
                if (CR.getString(1)==null) {
                    modele = "---";
                }
                else
                {
                    modele= CR.getString(1);
                }
                String date_time = CR.getString(CR.getColumnIndex("date_time"));
                String d_date = date_time.substring(0, 10);
     
                try {
                    d_date = new SimpleDateFormat("dd-MM-yyyy").format(new SimpleDateFormat("yyyy-MM-dd").parse(d_date));
     
                } catch (ParseException e) {
                    e.printStackTrace();
                }
     
     
                vehicule = vehicule +CR.getString(0) + " " + modele + " " + CR.getString(CR.getColumnIndex("couleur")) + " " + CR.getString(CR.getColumnIndex("motif")) + " " + CR.getString(CR.getColumnIndex("lieu"))
                + " " + d_date.toString() + "\n";
     
     
     
            }
                Vehicule_fragment vehicule_fragment =(Vehicule_fragment)getFragmentManager().findFragmentById(R.id.frag_id);
                vehicule_fragment.setText(vehicule);
     
     
            if (nbre_vu > 0)
     
            {
                Tv_verif.setVisibility(View.VISIBLE);
                Tv_verif.setText("Cette voiture a déjà été vue " + nbre_vu + " fois. Cliquez sur le bouton pour l'ajouter à la base de données... ");
                Bt_ajout_plaques.setVisibility(View.VISIBLE);
     
     
            } else
     
            {
                Tv_verif.setVisibility(View.VISIBLE);
                Tv_verif.setText("Cette voiture n'a jamais été vue !!! Cliquez sur le bouton pour l'ajouter à la base de données... ");
                Bt_ajout_plaques.setVisibility(View.VISIBLE);
            }
        }

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    J'imagine que Vehicule_fragment est une extension d'une TextView... Et où cela plante-t-il ? Pour quel motif ?

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Ci joint l'erreur

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                       java.lang.IllegalStateException: Could not execute method of the activity
                                                                                           at android.view.View$1.onClick(View.java:3633)
                                                                                           at android.view.View.performClick(View.java:4240)
                                                                                           at android.view.View$PerformClick.run(View.java:17721)
                                                                                           at android.os.Handler.handleCallback(Handler.java:730)
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                                           at android.os.Looper.loop(Looper.java:137)
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5103)
                                                                                           at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                           at java.lang.reflect.Method.invoke(Method.java:525)
                                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                                                           at dalvik.system.NativeStart.main(Native Method)
                                                                                        Caused by: java.lang.reflect.InvocationTargetException
                                                                                           at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                           at java.lang.reflect.Method.invoke(Method.java:525)
                                                                                           at android.view.View$1.onClick(View.java:3628)
                                                                                           at android.view.View.performClick(View.java:4240)*
                                                                                           at android.view.View$PerformClick.run(View.java:17721)*
                                                                                           at android.os.Handler.handleCallback(Handler.java:730)*
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:92)*
                                                                                           at android.os.Looper.loop(Looper.java:137)*
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5103)*
                                                                                           at java.lang.reflect.Method.invokeNative(Native Method)*
                                                                                           at java.lang.reflect.Method.invoke(Method.java:525)*
                                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)*
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)*
                                                                                           at dalvik.system.NativeStart.main(Native Method)*
                                                                                        Caused by: java.lang.NullPointerException
                                                                                           at com.example.benjamin.myapplication_v3.Verif_plaques.Bt_verif_verif(Verif_plaques.java:216)
                                                                                           at java.lang.reflect.Method.invokeNative(Native Method)*
                                                                                           at java.lang.reflect.Method.invoke(Method.java:525)*
                                                                                           at android.view.View$1.onClick(View.java:3628)*
                                                                                           at android.view.View.performClick(View.java:4240)*
                                                                                           at android.view.View$PerformClick.run(View.java:17721)*
                                                                                           at android.os.Handler.handleCallback(Handler.java:730)*
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:92)*
                                                                                           at android.os.Looper.loop(Looper.java:137)*
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5103)*
                                                                                           at java.lang.reflect.Method.invokeNative(Native Method)*
                                                                                           at java.lang.reflect.Method.invoke(Method.java:525)*
                                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)*
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)*
                                                                                           at dalvik.system.NativeStart.main(Native Method)*

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 34
    Points : 54
    Points
    54
    Par défaut
    De ton erreur, il semblerait que la View que tu transmets en appelant Bt_verif_verif() soit nulle.

    Peut-on voir le code de ton fichier Verif_plaques.java.java autour de la ligne 216 ? (La méthode complète pour nous aider à t'aiguiller).
    Gahfy - Développeur Android Freelance - Suivez-moi sur Twitter

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Voici le code... la ligne 216 est " Vehicule_fragment vehicule_fragment =(Vehicule_fragment)getFragmentManager().findFragmentById(R.id.frag_id);"
    mais si je dédie un bouton pour ce code la ->

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Vehicule_fragment vehicule_fragment =(Vehicule_fragment)getFragmentManager().findFragmentById(R.id.frag_id);
                vehicule_fragment.setText("COUCOU");
    Ca fontionne parfaitement.... mais si il est inclus dans le paquet bah plus rien !


    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
       if (nbre_vu > 0)
     
            {
                Tv_verif.setVisibility(View.VISIBLE);
                Tv_verif.setText("Cette voiture a déjà été vue " + nbre_vu + " fois. Cliquez sur le bouton pour l'ajouter à la base de données... ");
                Bt_ajout_plaques.setVisibility(View.VISIBLE);
     
     
               Vehicule_fragment vehicule_fragment =(Vehicule_fragment)getFragmentManager().findFragmentById(R.id.frag_id);
                vehicule_fragment.setText("COUCOU");
            } else
     
            {
                Tv_verif.setVisibility(View.VISIBLE);
                Tv_verif.setText("Cette voiture n'a jamais été vue !!! Cliquez sur le bouton pour l'ajouter à la base de données... ");
                Bt_ajout_plaques.setVisibility(View.VISIBLE);
            }
        }

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 34
    Points : 54
    Points
    54
    Par défaut
    Le problème vient d'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vehicule_fragment.setText("COUCOU");
    Ton vehicule_fragment est null. Le mieux est de tester la condition avant de faire cet appel.

    Le mieux que je puisse te suggérer, pour résoudre le problème, ce serait de déclarer le fragment comme propriété de ton Activity. Du coup, tu serais assuré qu'il n'est pas nul, et ne ferait pas un appel gourmand en resources dans l'Activity.
    Gahfy - Développeur Android Freelance - Suivez-moi sur Twitter

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par gahfy Voir le message
    Le problème vient d'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vehicule_fragment.setText("COUCOU");
    Ton vehicule_fragment est null. Le mieux est de tester la condition avant de faire cet appel.

    Le mieux que je puisse te suggérer, pour résoudre le problème, ce serait de déclarer le fragment comme propriété de ton Activity. Du coup, tu serais assuré qu'il n'est pas nul, et ne ferait pas un appel gourmand en resources dans l'Activity.
    merci de ta réponse cela me permet d'avancer... mais j'ai essayé de le déclarer en début mais il reste null !!! et pourquoi si je créée un bouton qui me modifie le texte cela fonctionne ??

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 34
    Points : 54
    Points
    54
    Par défaut
    La seule explication que je trouve (pourquoi ça marche avec un bouton et pas sans), c'est que lorsque tu appelles ta méthode, le fragment n'est pas encore associé à l'identifiant (ça se joue en ms lors de la création de l'Activity à ce niveau là).

    Par contre, lorsque tu cliques sur le bouton, le fragment est bien associé à l'id, donc à ce moment là, tu n'as plus de NullPointerException car le fragment est trouvé.

    Il faut voir l'ordre dans lequel tu appelles tes méthodes, et à quel moment tu appelles tes méthodes au niveau du lifecycle de l'Activity.
    Gahfy - Développeur Android Freelance - Suivez-moi sur Twitter

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par gahfy Voir le message
    La seule explication que je trouve (pourquoi ça marche avec un bouton et pas sans), c'est que lorsque tu appelles ta méthode, le fragment n'est pas encore associé à l'identifiant (ça se joue en ms lors de la création de l'Activity à ce niveau là).

    Par contre, lorsque tu cliques sur le bouton, le fragment est bien associé à l'id, donc à ce moment là, tu n'as plus de NullPointerException car le fragment est trouvé.

    Il faut voir l'ordre dans lequel tu appelles tes méthodes, et à quel moment tu appelles tes méthodes au niveau du lifecycle de l'Activity.

    La solution serait de faire un asynctask ??? pour eviter ce problème !

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 34
    Points : 54
    Points
    54
    Par défaut
    Non, pas un AsyncTask, qui serait bien crade.
    Plutôt de bien analyser le lifecycle de ton Activity et de ton Fragment, et de voir où placer ton code pour qu'il s'exécute une fois que le fragment est attaché.

    N'hésite pas à faire des logs pour voir quand est appelé quelle méthode.

    Tu pourrais par exemple dans ton fragment, créer un appel à ton Activity depuis onCreateView, pour que ton activity sache que le fragment est créé, et ensuite, faire tes opérations.
    Gahfy - Développeur Android Freelance - Suivez-moi sur Twitter

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Alors j'ai trouvé une solution qui marche....
    Dans le onCreate, j'affiche le fragment... même si il est vide et mon bouton affiche le texte dans le Textview.

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

Discussions similaires

  1. Mettre a jour fragment depuis activity
    Par Timoune007 dans le forum Android
    Réponses: 6
    Dernier message: 24/12/2015, 17h34
  2. Changer image d'un imageView dans un fragment depuis l'activity
    Par toufou dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 30/10/2014, 08h52
  3. Update dans une autre Activity ?
    Par volcom20 dans le forum Android
    Réponses: 5
    Dernier message: 03/01/2013, 22h18
  4. Réponses: 0
    Dernier message: 29/03/2010, 14h12

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