Aller au contenu

FragmentPagerAdapter et Timer : problème de setText intermitant


MBwork

Recommended Posts

Bonjour,

 

Après plusieurs recherche, je n'arrive pas a comprendre pourquoi mon setText marche des fois et des fois pas...  :rolleyes:

 

dans mon activity je fait appel a un Timer pour mettre à jour toutes les secondes un textView suite à l'appel d'un WS (pour avoir la donnée en temps réel) (mon timer se lance onResume, et se cancel OnPause)

 

le callback de ma TimerTask est la méthode suivante :

public void setNbVisitorTexte(int nbVisitor){
        System.out.println("nb : "+nbVisitor);
        int index = mViewPager.getCurrentItem();
        View view = mViewPager.getChildAt(index);
        System.out.println(" index : "+index);
        System.out.println(" vue : "+view);
        //pas de mise à jour sur le dernier fragment
        //pas de mise à jour tant que la vue du fragment n'a pas encore été créee (Fragment LifeCycle)
        if(index!=ID_FRAG_ABOUT && view!=null) {
            TextView nbVisiteur = (TextView) view.findViewById(R.id.txtV_NBvisitors);
            System.out.println(" txtV : "+nbVisiteur);
            if (nbVisiteur!=null) { //le text view a-t-il été trouvé
                String val = String.valueOf(nbVisitor);
                nbVisiteur.setText(val);
                System.out.println(" in IF update "+val);
            }

        }

ce textView txtV_NBvisitors est inclu dans 3 de mes 4 fragments qui sont géré par FragmentPagerAdapter (proposition par defaut des tabbed Activity de Android Studio)

 

J'avais plusieurs fois des null pointeur Exeption étant donné que mon activity ne trouvais pas encore la vue du fragment lors que le timer voulant mettre a jour à chaque seconde se lançait avant que le fragment.OnCreateView ai été applé (enfin je crois que c'est pour cela)

 

J'ai pas très envie de déporter le timer au niveau des mes fragments car je voudrais pour l'instant que le code reste simple à lire donc j'ai "résolu" ce soucis en ne mettant pas a jour l'interface pendant ces "secondes" là puisque de toute façon l'oppération sera retenté à la prochaine seconde.

 

Pourtant en navigant entre mes fragements lorsque je teste l'application, mon txtV_NBvisitors ne se met pas toujours à jour malgrès que les log indiquent : 

05-08 04:06:29.279    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 21
05-08 04:06:29.279    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 0
05-08 04:06:29.279    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52dd97a4 V.E..... ......I. 0,0-1080,1677}
05-08 04:06:29.279    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52de3270 V.ED.... ........ 438,193-546,448 #7f08005a app:id/txtV_NBvisitors}
05-08 04:06:29.279    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 21

--> arrvié sur le fragment 0 : mise à jour OK affiche bien 21

05-08 04:07:14.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 21
05-08 04:07:14.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 1
05-08 04:07:14.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52dfc05c V.E..... ........ 1080,0-2160,1677}
05-08 04:07:14.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df7948 V.ED.... ........ 438,193-546,448 #7f08005a app:id/txtV_NBvisitors}
05-08 04:07:14.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 21

--> passe au fragment 1 : mise à jour OK affiche bien 21

05-08 04:07:15.215    3548-3565/work.mariebarbier.legovisitorfrag I/System.out﹕ +2 
05-08 04:07:15.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 23
05-08 04:07:15.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 1
05-08 04:07:15.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52dfc05c V.E..... ........ 1080,0-2160,1677}
05-08 04:07:15.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df7948 V.ED.... ........ 384,193-600,448 #7f08005a app:id/txtV_NBvisitors}
05-08 04:07:15.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 23

--> ajout 2 a la valeur : mise à jour OK affiche bien 23 

05-08 04:07:16.079    3548-3568/work.mariebarbier.legovisitorfrag I/System.out﹕ +3
05-08 04:07:16.451    3548-3562/work.mariebarbier.legovisitorfrag D/dalvikvm﹕ GC_FOR_ALLOC freed 462K, 4% free 16842K/17372K, paused 3ms, total 3ms
05-08 04:07:16.451    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 26
05-08 04:07:16.451    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 1
05-08 04:07:16.451    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52dfc05c V.E..... ........ 1080,0-2160,1677}
05-08 04:07:16.451    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df7948 V.ED.... ........ 384,193-600,448 #7f08005a app:id/txtV_NBvisitors}
05-08 04:07:16.451    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 26

--> ajout 3 a la valeur : mise à jour OK affiche bien 26

05-08 04:07:16.895    3548-3564/work.mariebarbier.legovisitorfrag I/System.out﹕ +5
05-08 04:07:17.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 31
05-08 04:07:17.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 1
05-08 04:07:17.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52dfc05c V.E..... ........ 1080,0-2160,1677}
05-08 04:07:17.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df7948 V.ED.... ........ 384,193-600,448 #7f08005a app:id/txtV_NBvisitors}
05-08 04:07:17.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 31

--> ajout 5 a la valeur : mise à jour OK affiche bien 31

05-08 04:07:18.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 31
05-08 04:07:18.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 2
05-08 04:07:18.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52e09efc V.E..... ........ 2160,0-3240,1677}
05-08 04:07:18.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df0e94 V.ED.... ........ 438,193-546,448 #7f08005a app:id/txtV_NBvisitors}
05-08 04:07:18.443    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 31

--> passe au fragment 2 : mise à jour OK affiche bien 31


05-08 04:07:19.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 31
05-08 04:07:19.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 2
05-08 04:07:19.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52e25c70 V.E..... ......ID 3240,0-4320,1677}
05-08 04:07:19.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : null

--> ici on a perdu le textview ??? oO? (surement à cause de la navigation entre les fragment?) bref pas de mise a jour, on verra ca à la prochaine seconde

05-08 04:07:20.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 31
05-08 04:07:20.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 1
05-08 04:07:20.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52e09efc V.E..... ........ 2160,0-3240,1677}
05-08 04:07:20.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df0e94 V.ED.... ........ 384,193-600,448 #7f08005a app:id/txtV_NBvisitors}
05-08 04:07:20.447    3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 31

--> passe au fragment 1 : mise à jour OK affiche bien 31

 

05-08 04:07:22.447 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 31

05-08 04:07:22.447 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 1

05-08 04:07:22.447 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52e09efc V.E..... ......ID 2160,0-3240,1677}

05-08 04:07:22.447 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df0e94 V.ED.... ......ID 384,193-600,448 #7f08005a app:id/txtV_NBvisitors}

05-08 04:07:22.447 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 31

05-08 04:07:23.455 3548-3566/work.mariebarbier.legovisitorfrag D/dalvikvm﹕ GC_FOR_ALLOC freed 504K, 4% free 16848K/17412K, paused 3ms, total 5ms

05-08 04:07:23.455 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ nb : 31

05-08 04:07:23.455 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ index : 0

05-08 04:07:23.455 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ vue : android.support.v4.app.NoSaveStateFrameLayout{52dfc05c V.E..... ........ 1080,0-2160,1677}

05-08 04:07:23.455 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ txtV : android.widget.TextView{52df7948 V.ED.... ........ 384,193-600,448 #7f08005a app:id/txtV_NBvisitors}

05-08 04:07:23.455 3548-3548/work.mariebarbier.legovisitorfrag I/System.out﹕ in IF update 31

 

--> le fragment index 0 affiche maintenant 0 dans le text view alors que le log indique que la valeur passé au texte view est bien 31...

 

Avez-vous une idée? est-il question de refaire un setContent après un inflate? car là je suis complètement perdu sur cette anomalie intermittente...

 

est-ce à cause de la ligne :

05-08 04:07:23.455 3548-3566/work.mariebarbier.legovisitorfrag D/dalvikvm﹕ GC_FOR_ALLOC freed 504K, 4% free 16848K/17412K, paused 3ms, total 5ms

je ne comprend pas ce qu'elle signifie

 

Merci d'avance

Modifié par MBwork
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...