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 :

Erreur ExpandableListView Android


Sujet :

Android

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Erreur ExpandableListView Android
    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 :



    Code :

    OngletRechercherListe.java
    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
    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
    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
    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
    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
    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
    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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?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

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Heu... je pense que l'erreur n'a rien a voir avec ExpandableListView (d'ailleurs il y a une typo dans le XML ????? )

    Il y a un erreur lors du addTab / TabHost !!!

    Il y a bien un TabHost de défini avec android.R.id.tab ? (ou un truc du genre) ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Déjà merci de prendre le temps de m'aider . Oui il y a bien un TabHost de défini mais il se trouve dans l'autre partie du code. Le truc c'est que cela marchait très bien avant que j'ajoute la nouvelle activité à l'onglet, c'est donc pour ça que je pensai que le problème venait de l'ExpandableListView. Je met le code de la partie qui gère les onglets

    FenetreTabLayoutRechercher.java
    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
    package com.example.lr_walk;
     
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.TabActivity;
    import android.content.Intent;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
    import android.support.v4.app.NavUtils;
     
    public class FenetreTabLayoutRechercher extends TabActivity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_fenetre_tablayout_rechercher);
     
            TabHost maTabHost = getTabHost();
     
            //Ajout onglet liste
            TabSpec listeSpec = maTabHost.newTabSpec("Destination");
            Intent listeIntent = new Intent(this,OngletRechercherListe.class);
            listeSpec.setContent(listeIntent);
     
          //Ajout onglet liste
            TabSpec carteSpec = maTabHost.newTabSpec("Carte");
            Intent carteIntent = new Intent(this,OngletRechercherCarte.class);
            carteSpec.setContent(carteIntent);
     
            maTabHost.addTab(listeSpec);
            maTabHost.addTab(carteSpec);
        }
     
    }
    activity_fenetre_tablayout_rechercher.xml
    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
    <?xml version="1.0" encoding="utf-8"?>
    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"/>
        </LinearLayout>
    </TabHost>

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Moi je lis juste ce qui est marqué dans le logcat (tu aurais du le 'paster' au lieu de prendre un screen ca aurait été plus simple pour coller ):

    Le LogCat dit:

    IllegalArgumentException: You must specify a way to create the tab indicator
    lors de l'appel à addTab()
    ligne 32 de FenetreTabLayoutRechercher.java (dans la fonction onCreate() )

    Un appel à setIndicator() qui manque ?
    (j'avoue ne pas avoir regardé le code)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je viens juste de commencer la prog sur android donc quand j'ai regarder le tuto dessus il y a des choses que je n'ai pas forcement assimilé. Je ne sais donc pas à quoi sert le setIndicator() ^^

    Edit: Je viens de regarder la doc et je me rappelle ce à quoi correspond setIndicator. J'ai donc rajouter :

    listeSpec.setIndicator("Liste");
    carteSpec.setIndicator("Carte");

    mais ça plante toujours...

    j'ai toujours le même problème. Quand j'ai juste mes onglets sans l'expandableListView dedans ça marche très bien mais dès que je la rajoute ça plante, je ne comprends vraiment pas pourquoi.. Merci

  6. #6
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Est ce que l'activity OngletRechercherListe est bien déclaré dans le manifest ?

    Regarde aussi ce que tu as dans la variable listeIntent.

    Après pour créer une tabSpec normalement on a ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Intent listeIntent = new Intent(this,OngletRechercherListe.class);
    tabSpec = tabHost.newTabSpec("Destination").setIndicator("Destination",
    	getResources().getDrawable(R.drawable.icon)).setContent(listeIntent);
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

Discussions similaires

  1. Erreur SQLite Android
    Par mokhtar1105 dans le forum Android
    Réponses: 4
    Dernier message: 29/02/2012, 18h57
  2. Erreur sous Android
    Par fascino dans le forum Android
    Réponses: 2
    Dernier message: 26/08/2011, 15h56
  3. Erreur sous Android WebService
    Par fascino dans le forum Android
    Réponses: 1
    Dernier message: 22/08/2011, 15h11
  4. Erreur : com.android.phone Eclipse
    Par btobb dans le forum Android
    Réponses: 5
    Dernier message: 24/06/2011, 15h41
  5. Rapport d'erreur depuis android market
    Par CaviarNAS dans le forum Android
    Réponses: 9
    Dernier message: 03/12/2010, 11h12

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