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 :

ExpandableListView utilisant plusieurs modèles de vues


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut ExpandableListView utilisant plusieurs modèles de vues
    Bonsoir de nouveau,
    J'ai réussis à implémenter une expandableListView et je me demandais comment faire pour réutiliser des vues différentes dans la methode getChildView.

    En fait j'aurais plusieurs sous noeud qui peuvent avoir une représentation complétement différente suivant leurs parents. Par exemple les 2 premiers menu afficheront du texte et le dernier une image.

    Dans ce cas je pense mettre un attribut a chaque fois que je construit une view grace a le methode setTag().
    Le problème vient du fait que lors de la récupération de la convertView, si ce n'est pas la bonne vue, je ne l'utilise pas et je la "jette". (Ou alors je peux la sauvegarder temporairement dans un singleton);

    Il n'y a pas une meilleur façon de faire ? Car ça me parait bien lourd là.

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Pourrais tu nous montrer cette partie de code ?

    La gestion des Views via les Tags reste une bonne idée

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Bonsoir,

    Voici la partie du code concernant l'adapter :
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    public class MyExpandableListAdapter extends BaseExpandableListAdapter 
    	{
    		private ArrayList<String> groupe;
    		private ArrayList<Message> messages_r;
    		private ArrayList<Message> messages_e;
    		private Activity           context;
     
    		public MyExpandableListAdapter(ArrayList<Message> messages_r,
    				ArrayList<Message> messages_e,
    				Activity context)
    		{
    			groupe = new ArrayList<String>();
    			this.groupe.add("Boite de reception");
    			this.groupe.add("Boite d'envois");
    			this.messages_r = messages_r;
    			this.messages_e = messages_e;
    			this.context = context;
    		}
     
    		public Object getChild(int groupPosition, int childPosition) 
    		{
    			if (groupPosition == RECEPTION)
    				return (messages_r.get(childPosition));
    			else
    				return (messages_e.get(childPosition));
    		}
     
    		public long getChildId(int groupPosition, int childPosition) 
    		{			
    			return (childPosition);
    		}
     
    		public int getChildrenCount(int groupPosition) 
    		{
    			if (groupPosition == RECEPTION)
    				return (messages_r.size());
    			else
    				return (messages_e.size());
    		}
     
    		public View getChildView(int groupPosition, int childPosition,
    				boolean isLastChild, View convertView, ViewGroup parent) 
    		{
    			View row = convertView;
    			ViewWrapper wrapper = null;
     
    			if (row == null)
    			{
    				LayoutInflater inf = context.getLayoutInflater();
    				row = inf.inflate(R.layout.message, null);
    				wrapper = new ViewWrapper(row);
    				row.setTag(wrapper);
    			}
    			else
    				wrapper = (ViewWrapper)row.getTag();
    			wrapper.getReferent().setText(((Message)getChild(groupPosition, childPosition)).getReferent());
    			wrapper.getTitre().setText(((Message)getChild(groupPosition, childPosition)).getTitre());
    			return row;
    		}
     
    		public Object getGroup(int groupPosition) 
    		{
    			return groupe.get(groupPosition);
    		}
     
    		public int getGroupCount() 
    		{
    			return groupe.size();
    		}
     
    		public long getGroupId(int groupPosition) 
    		{
    			return groupPosition;
    		}
     
    		public View getGroupView(int groupPosition, boolean isExpanded,
    				View convertView, ViewGroup parent) 
    		{
    			View row = convertView;
    			ViewWrapper wrapper = null;
     
    			if (row == null)
    			{
    				LayoutInflater inf = context.getLayoutInflater();
    				row = inf.inflate(R.layout.messagerierow, null);
    				wrapper = new ViewWrapper(row);
    				row.setTag(wrapper);
    			}
    			else
    				wrapper = (ViewWrapper)row.getTag();
    			wrapper.getGroupeName().setText(((String)getGroup(groupPosition)));
    			return row;
    		}
     
    		public boolean isChildSelectable(int groupPosition, int childPosition) 
    		{
    			return true;
    		}
     
    		public boolean hasStableIds() 
    		{
    			return true;
    		}
     
    	}
    Celle concernant le wrapper :
    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
     
    public class ViewWrapper
    {
    	private View base;
    	private TextView referent;
    	private TextView titre;
    	private TextView groupeName;
     
    	public ViewWrapper(View r)
    	{	
    		this.base = r;
    		referent = null;
    		titre = null;
    		groupeName = null;
    	}
     
    	public TextView getReferent()
    	{
    		if (referent == null)
    			referent = (TextView) base.findViewById(R.id.referent);
    		return (this.referent);
    	}
     
    	public TextView getTitre()
    	{
    		if (titre == null)
    			titre = (TextView) base.findViewById(R.id.titre);
    		return (this.titre);
    	}
    	public TextView getGroupeName()
    	{
    		if (groupeName == null)
    			groupeName = (TextView) base.findViewById(R.id.groupname);
    		return groupeName;
    	}
    }
    Sur cela j'aimerais implémenter une liste d'amis, donc l'affichage d'un fils pourra être soit l'affichage d'un message ( auteur, titre) soit une icône ainsi que le nom de l'ami.
    Il faut donc que j'utilise deux vues différentes .


    Je pense mettre un attribut dans le viewwrapper pour savoir a quelle vue il fait 'référence' et faire ainsi un if dans le getViewChild.
    Mais peut être que les convertView dans cette liste sont relatifs aux parents et donc je m’embête pour rien

  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 : 41
    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
    Par défaut
    Dans le getChildView, tu as le paramètre groupPosition, qui te permet de savoir dans quel groupe (parent) se situe ta vue enfant.
    Du coup, si tu veux personnaliser les vue enfant en fonction du titre du groupe, tu peux peut être tout simplement tester ce paramètre ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Citation Envoyé par MrDuChnok Voir le message
    Dans le getChildView, tu as le paramètre groupPosition, qui te permet de savoir dans quel groupe (parent) se situe ta vue enfant.
    Du coup, si tu veux personnaliser les vue enfant en fonction du titre du groupe, tu peux peut être tout simplement tester ce paramètre ?
    Justement, cette méthode implique que la convertView que l'on récupère ne vienne pas d'un autre parent et je ne sais pas comment android gère les convertView.

    Par exemple si on a ca :
    Parent 1
    * Fils X1
    * Fils X2
    Parent 2
    * Fils Y1
    * Fils Y2

    Est-ce que dans parent 2 on peut récupérer une convertView d'un fils du parent1 ?

Discussions similaires

  1. Comment utiliser plusieurs models pour une seule vue
    Par jérémyp8 dans le forum ASP.NET MVC
    Réponses: 11
    Dernier message: 09/07/2020, 23h22
  2. [1.x] Création de module utilisant plusieurs modèles
    Par d10g3n dans le forum Symfony
    Réponses: 6
    Dernier message: 16/07/2010, 15h48
  3. Java Desktop Application : utiliser plusieurs vues
    Par antow42 dans le forum NetBeans
    Réponses: 1
    Dernier message: 05/01/2010, 15h51
  4. [BI Publisher] Utiliser plusieurs modèle de données
    Par madevilts dans le forum Autres outils décisionnels
    Réponses: 1
    Dernier message: 04/09/2009, 14h51
  5. Réponses: 3
    Dernier message: 12/02/2009, 15h44

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