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 :

passer un view holder a une fonction


Sujet :

Composants graphiques Android

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Points : 100
    Points
    100
    Par défaut passer un view holder a une fonction
    Bonjour

    J ' essaie d ' appliquer le pattern ViewHolder pour ma listview , mais je n arrive pas a le passer a mes fonctions pour que celles ci puissent l ' utiliser .

    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
    public View getView(int position, View convertView, ViewGroup parent) {
     
    		final ViewHolder holder ;
     
     
    		   if (convertView == null) {
                   convertView = inflater.inflate(R.layout.mediaplayer, null);
     
                   holder = new ViewHolder();
                   	tab=new TabVoiceMail();
     
                  holder.playButton=(ImageButton)convertView.findViewById(R.id.button_play);
                  holder.barre=(ProgressBar)convertView.findViewById(R.id.progress_bar);
                  holder.fondEcran=(AbsoluteLayout)convertView.findViewById(R.id.affichage);
     
     
     
                  	//updateTime();
     
                  	holder.playButton.setOnClickListener(new OnClickListener() {
     
                  			public void onClick(View view) {
     
     
     
     
                  				play();
                  				holder.fondEcran.setBackgroundColor(Color.BLUE);
     
                  				calculProgressBar();
                  				etatLecteur();
     
     
     
     
            		}});
                  //tab.play();
     
     
     
     
                   convertView.setTag(holder);
               } else {
     
                   holder = (ViewHolder) convertView.getTag();
               }
     
     
     
    		   holder.playButton.setTag(position);
               return convertView;
           }
    la j ' ai un null pointer levé quant j ' appelle ma fonction etatlecteur() alors que j ' ai bien appelé le view holder dedans

    ma fonction est composée ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	public void etatLecteur()
    	{
    		final ViewHolder holder ;
    		holder=new ViewHolder();
    		  if (mMediaPlayer.isPlaying()) {
     
    				mMediaPlayer.pause();
     
    				holder.playButton.setImageResource(R.drawable.button_play);
    			} else {
    				mMediaPlayer.start();
    				holder.playButton.setImageResource(R.drawable.button_pause);
    			}
    	}
    null pointer sur le holder.playButton comme si il reconnaissait pas mon viewholder

    je precise que ca marche si je fout directement le code dans mon onclick sans faire de fonctions mais ca ferait un gros foutoir apres vu les fonctions qui necessitent le viewholder

    merci de votre aide

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    Premièrement si tu veux qu'on puisse rapidement t'aider, il serait bon de bien indenter ton code avant de le publier ici. Ca facilite grandement la lecture / debogage.

    sinon ton nullpointerexception provient bien de ta méthode etatLecteur() :
    Tu instancie un nouvel objet ViewHolder, et juste derrière tu cherches à utiliser le membre "playButton". Je ne vois pas dans ton code à quel moment ce bouton est initialisé.
    As-tu compris l'intérêt du mécanisme de ViewHolder ?
    Sans tester, je te suggererais de faire quelques choses comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void etatLecteur(View aView)
    {
      ViewHolder holder = null;
      holder=(ViewHolder)aView.getTag();
      if (mMediaPlayer.isPlaying()) {
    	mMediaPlayer.pause();
    	holder.playButton.setImageResource(R.drawable.button_play);
      } else {
    	mMediaPlayer.start();
    	holder.playButton.setImageResource(R.drawable.button_pause);
      }
    }
    et lorsque tu appelles ta méthode, de modifier en conséquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    holder.playButton.setOnClickListener(new OnClickListener() {
       public void onClick(View view) {
          play();
          holder.fondEcran.setBackgroundColor(Color.BLUE);
          calculProgressBar();
          etatLecteur(view);
       }
    });
    (tu peux même carrément passer ta ViewHolder en paramètre)
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Points : 100
    Points
    100
    Par défaut
    Salut
    Merci de ta réponse et de ton aide

    Désolé pour l ' indentation , je change tellement mon code que j ' oublie d ' indenter systematiquement apres.
    Ca ne se reproduira plus

    apres test et corrections , toujours un nullpointer a cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    holder.playButton.setImageResource(R.drawable.button_pause);
    un viewholder consiste a garder une reference des elements declares .
    J ' ai raison ?

    D' autant que je ne comprends pas pourquoi eclipse me signale justement ce bouton comme jamais utilise(never read) alors que le viewholder l' utilse

    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
    public static class AdapterTest extends BaseAdapter implements FilenameFilter{
    	private LayoutInflater inflater;
    	public MediaPlayer mMediaPlayer;
    	   private static final String TAG = "Test";
    	   private ImageButton playButton;
    	   private int currentPosition = 0;
               private ProgressBar barre;
    	   private String path;
     
     
     
               public AdapterTest(Context context)
    	 {
    		 inflater=LayoutInflater.from(context);
    	  }

    Merci de ton aide

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    Alors concernant le warning sur Eclipse, c'est normal, tu utilises la variable "playButton" de ta classe "ViewHolder", mais pas celle de ta classe "AdapterTest".

    Concernant ton nullpointerexception, il faudrait que tu utilises le debuguer pour voir si tes holders sont bien stockés dans chaque vue.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Points : 100
    Points
    100
    Par défaut
    merci apres quelque modif, il me sort maintenant un
    classCastException sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     holder=(ViewHolder)aView.getTag();
    comme si il ne reconnaissait pas le cast

    Merci de ton aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void etatLecteur(View aView)
    	{
    	  ViewHolder holder = null;
    	  holder=(ViewHolder)aView.getTag();
    	  if (mMediaPlayer.isPlaying()) {
    		mMediaPlayer.pause();
    		holder.playButton.setImageResource(R.drawable.button_play);
    	  } else {
    		mMediaPlayer.start();
     
    		holder.playButton.setImageResource(R.drawable.button_pause);
    	  }
    	}

  6. #6
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    passe directement le holder en paramètre, t'auras peut être moins de soucis, et ça sera peut être plus clair
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Points : 100
    Points
    100
    Par défaut
    merci ca marche impec

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/09/2006, 12h25
  2. Réponses: 3
    Dernier message: 28/11/2005, 12h15
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. Passer le résultat (tableau) d'une fonction
    Par coyote90 dans le forum Access
    Réponses: 3
    Dernier message: 10/11/2005, 19h56
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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