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 :

Problème avec ViewPager et findViewById


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 78
    Points : 50
    Points
    50
    Par défaut Problème avec ViewPager et findViewById
    Salut,

    J'ai un petit problème dans mon application. J'utilise un ViewPager pour pour "switcher" facilement entre deux pages. Chaque page est composé de layouts sur lesquels je veux placer un onclicklistener.

    Voici mon code:

    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
    // Création de la liste de Fragments que fera défiler le PagerAdapter
    		List fragments = new Vector();
     
    		// Ajout des Fragments dans la liste
    		fragments.add(Fragment.instantiate(this,Proprietes1.class.getName()));
    		fragments.add(Fragment.instantiate(this,Proprietes2.class.getName()));
     
    		// Création de l'adapter qui s'occupera de l'affichage de la liste de
    		// Fragments
    		mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
     
    		ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);
    		// Affectation de l'adapter au ViewPager
    		pager.setAdapter(this.mPagerAdapter);
     
    		pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    	        @Override
    	        public void onPageSelected(int position) {
    	            switch(position){
    	            case 0:
    	            	technologie=(LinearLayout)findViewById(R.id.technologie);
    	            	technologie.setOnClickListener(this);
    	            	break;
    	            case 1:
    	            	break;
    	            }
    	        }
    	    });
    Donc si je fais ça , l'écoute du clic sur mon LinearLayout dans la page 1 n'est pas actif quand j'arrive sur mon activité. Elle l'est seulement quand je vais sur la page 2 et que je reviens sur la page 1 ce qui est logique puisque je déclare l'écoute dans l'évenement onpagechange.

    Mon problème , c'est que si je déclare ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    technologie=(LinearLayout)findViewById(R.id.technologie);
    technologie.setOnClickListener(this);
    ... en dehors de l'évenement onPageChange , j'ai une erreur de type NullPointerException sur la deuxième ligne et mon application plante dés que j'arrive sur l'activité concernée.

    Vous pouvez m'aider ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Ce "comportement" est normal.
    Ce n'est pas à l'activité hôte de déclarer et d'affecter des Listeners, mais aux Fragments enfants (contenus dans le ViewPager).
    Ainsi, dans ton bout de code, lorsque tu fais appel à findViewById, le système ne va pas chercher cet identifiant dans le Fragment que tu souhaite, mais plutôt dans l'Activity hôte.

    De plus l’événement onPageChanged ne doit certainement pas être appelé à l'affichage étant donné que la page ne change pas réellement.

    Mon conseil serait de créer une sous classe héritant de Fragment, qui pourra ainsi ajouter un listener au moment où il est affiché.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 78
    Points : 50
    Points
    50
    Par défaut
    Merci ça fonctionne et c'est bien plus propre effectivement.

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

Discussions similaires

  1. Problème avec ViewPager et Fragments
    Par anto2b dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 16/04/2014, 17h21
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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