Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Problème ExpandableListView

Sujet résolu
    6 juillet 2012 à 18:43:10

    Bonjour a tous, je me lance dans le développement Android et pour le moment j'essaye d'afficher une liste à plusieurs niveau avec un ExpandableListView. Le programme se découpe pour l'instant comme ça, j'ai mon accueil avec plusieurs boutons puis lorsque l'on clique sur le bouton du haut on ouvre une nouvelle activité qui si constitue de deux onglet, l'ExpandableListView se trouve dans le première onglet. Je vous met donc l'erreur que j'ai ainsi que le code de cette activité. A préciser que dans l'affichage de cette liste le premier niveau correspond à une catégorie (d'où la classe Categorie) et le deuxième niveau correspond à un lieux (avec la classe lieux).

    Erreur :

    Image utilisateur

    Code :

    OngletRechercherListe.java
    package com.example.lr_walk;
    
    import java.util.ArrayList;
    import android.os.Bundle;
    import android.app.Activity;
    import android.widget.ExpandableListView;
    
    public class OngletRechercherListe extends Activity {
    
    	private ExpandableListView maListeView;
    	ArrayList<Categorie> maListe = new ArrayList<Categorie>();
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_onglet_rechercher_liste);
            
            maListeView = (ExpandableListView)findViewById(R.id.liste_view);
            
            //Permet de remplir la liste
            Categorie categorie1 = new Categorie("Restaurant Universitaire");
            Categorie categorie2 = new Categorie("Mutuelle étudiante");     
            Lieux lieux1 = new Lieux(categorie1,"Ru République","12 rue de coureilles","17000","La Rochelle",1);
            Lieux lieux2 = new Lieux(categorie1,"Ru Anthinée","20 rue de l'iut","17000","La Rochelle",2);
            Lieux lieux3 = new Lieux(categorie2,"SMECO","45 rue des sciences","17000","La Rochelle",3);
            Lieux lieux4 = new Lieux(categorie2,"LMDE","21 rue Victor Hugo","17000","La Rochelle",4);      
            ArrayList<Lieux> liste1 = new ArrayList<Lieux>();
            ArrayList<Lieux> liste2 = new ArrayList<Lieux>();
            liste1.add(lieux1);
            liste1.add(lieux2);
            liste2.add(lieux3);
            liste2.add(lieux4);
            categorie1.setListe(liste1);
            categorie2.setListe(liste2);
            maListe.add(categorie1);
            maListe.add(categorie2);
            
            LieuxAdapter monAdapter = new LieuxAdapter(this, maListe);
            maListeView.setAdapter(monAdapter);
            
        }
        
    }
    


    Categorie.java
    package com.example.lr_walk;
    
    import java.util.ArrayList;
    
    public class Categorie{
    	private String sonNom;
    	private ArrayList<Lieux> saListe;
    	
    	public Categorie(String unNom)
    	{
    		super();
    		this.sonNom = unNom;
    		this.saListe = new ArrayList<Lieux>();
    	}
    	
    	public String getNom() {
    		return sonNom;
    	}
    
    	public void setNom(String unNom) {
    		this.sonNom = unNom;
    	}
    
    	public ArrayList<Lieux> getListe() {
    		return saListe;
    	}
    
    	public void setListe(ArrayList<Lieux> uneListe) {
    		this.saListe = uneListe;
    	}
    	
    }
    


    Lieux.java
    package com.example.lr_walk;
    
    class Lieux {
    	private Categorie saCategorie;
    	private String sonNom;
    	private String sonAdresse;
    	private String sonCodePostale;
    	private String saVille;
    	private int sonId;
    	
    	public Lieux(Categorie uneCategorie, String unNom, String uneAdresse, String unCodePostale, String uneVille, int unId)
    	{
    		super();
    		this.saCategorie = uneCategorie;
    		this.sonNom = unNom;
    		this.sonAdresse = uneAdresse;
    		this.sonCodePostale = unCodePostale;
    		this.saVille = uneVille;
    		this.sonId = unId;
    	}
    	
    	public Categorie getCategorie()
    	{
    		return saCategorie;
    	}
    	
    	public void getCategorie(Categorie uneCategorie)
    	{
    		saCategorie = uneCategorie;
    	}
    	
    	public String getSonNom() 
    	{
    		return sonNom;
    	}
    
    	public void setSonNom(String sonNom) 
    	{
    		this.sonNom = sonNom;
    	}
    
    	public String getSonAdresse()
    	{
    		return sonAdresse;
    	}
    
    	public void setSonAdresse(String sonAdresse)
    	{
    		this.sonAdresse = sonAdresse;
    	}
    
    	public String getSonCodePostale() 
    	{
    		return sonCodePostale;
    	}
    
    	public void setSonCodePostale(String sonCodePostale)
    	{
    		this.sonCodePostale = sonCodePostale;
    	}
    
    	public String getSaVille()
    	{
    		return saVille;
    	}
    
    	public void setSaVille(String saVille)
    	{
    		this.saVille = saVille;
    	}
    	
    	public int getId()
    	{
    		return sonId;
    	}
    	
    	public void setId(int unId)
    	{
    		this.sonId = unId;
    	}
    }
    


    LieuxAdapter.java
    package com.example.lr_walk;
    
    import java.util.ArrayList;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.TextView;
    
    public class LieuxAdapter extends BaseExpandableListAdapter{
    	
    	private Context monContext;
    	private ArrayList<Categorie> maListeCategorie;
    	private LayoutInflater monLayoutInflater;
    
    	public LieuxAdapter(Context unContext, ArrayList<Categorie> uneListeCategorie)
    	{
    		this.monContext = unContext;
    		this.maListeCategorie = uneListeCategorie;
    		monLayoutInflater = LayoutInflater.from(monContext);
    	}
    	
    	public boolean areAllItemsEnabled()
    	{
    		return true;
    	}
    	
    	public Object getChild(int unePosition, int enfantPosition)
    	{
    		return maListeCategorie.get(unePosition).getListe().get(enfantPosition);
    	}
    
    	public long getChildId(int groupPosition, int childPosition)
    	{
    		return childPosition;
    	}
    
    	public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) 
    	{
    		final Lieux unLieux = (Lieux) getChild(groupPosition,childPosition);
    		
    		ChildViewHolder unChildViewHolder;
    		
    		if(convertView == null)
    		{
    			unChildViewHolder = new ChildViewHolder();
    			convertView = monLayoutInflater.inflate(R.layout.itemcategorie,null);
    			unChildViewHolder.sonTextViewChild = (TextView) convertView.findViewById(R.id.textViewNom);
    			convertView.setTag(unChildViewHolder);
    		}
    		else
    		{
    			unChildViewHolder = (ChildViewHolder) convertView.getTag();
    		}
    		unChildViewHolder.sonTextViewChild.setText(unLieux.getSonNom());
    		return convertView;
    	}
    
    	public int getChildrenCount(int groupPosition) {
    		return maListeCategorie.get(groupPosition).getListe().size();
    	}
    
    	public Object getGroup(int groupPosition) {
    		return maListeCategorie.get(groupPosition);
    	}
    
    	public int getGroupCount() {
    		return maListeCategorie.size();
    	}
    
    	public long getGroupId(int groupPosition) {
    		return groupPosition;
    	}
    
    	public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent)
    	{
    		GroupViewHolder monGHolder;
    		Categorie maCategorie = (Categorie) getGroup(groupPosition);
    		
    		if(convertView == null)
    		{
    			monGHolder = new GroupViewHolder();
    			convertView = monLayoutInflater.inflate(R.layout.itemcategorie, null);
    			monGHolder.sonTextViewGroup = (TextView) convertView.findViewById(R.id.nom_groupe);
    			convertView.setTag(monGHolder);
    		}
    		else
    		{
    			monGHolder = (GroupViewHolder)convertView.getTag();
    		}
    		monGHolder.sonTextViewGroup.setText(maCategorie.getNom());
    		return convertView;
    	}
    
    	public boolean hasStableIds() {
    		return true;
    	}
    
    	public boolean isChildSelectable(int groupPosition, int childPosition) {
    		return true;
    	}
    	
    	public class GroupViewHolder
    	{
    		public TextView sonTextViewGroup;
    	}
    	
    	public class ChildViewHolder
    	{
    		public TextView sonTextViewChild;
    	}
    	   
    }
    


    activity_onglet_rechercher_liste.xml
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        
        <ExpandableListeView
            android:id="@+id/liste_view"
            android:layout_width="fill_parent"
        	android:layout_height="fill_parent" >
        </ExpandableListeView>
        
    </LinearLayout>
    


    itemcategorie.xml
    <?xml version="1.0" encoding="utf-8"?>
    
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/nom_groupe"
        android:text="Groupe"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:gravity="center_vertical"
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textAppearance="?android:attr/textAppearanceLarge"/>
    


    itemlieux.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    
    	<TextView
    		android:id="@+id/textViewNom"
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"/>
    	
    </LinearLayout>
    


    Si vous avez besoin d'autre parties du code n'hésiter pas. Cordialement :)
    • Partager sur Facebook
    • Partager sur Twitter
      9 juillet 2012 à 19:35:53

      Bonsoir,

      L'erreur dans le LogCat que tu nous donnes indique une erreur au niveau de la création de tes tab.
      Il faudrait donc avoir le code relatif à leurs créations. :)
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        10 juillet 2012 à 10:45:22

        Merci de me répondre, mais j'ai réussi à résoudre mon problème. Je ne pourrais pas dire comment j'ai fait car je n'ai aucune idée, j'ai juste recommence mon code à zéro.
        • Partager sur Facebook
        • Partager sur Twitter

        [Android] Problème ExpandableListView

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown