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 :

SimpleAdapter; et setVisibility(View.GONE) ?


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    Points : 57
    Points
    57
    Par défaut SimpleAdapter; et setVisibility(View.GONE) ?
    Bonjour,

    J'ai utilisé SimpleAdapter pour afficher mes différentes infos, et cela marche très bien.

    Je voudrais ajouter une fonctionnalité pour pouvoir masquer certains éléments de cette vue.
    J'ai donc créer ma classe MineSimpleAdapter qui hérite de SimpleAdapter et dans le getView, j'ai mis un setVisibility(View.GONE); (suivant le critère choisi).

    Sauf que au lieu d'avoir le résultat escompté, j'ai un résultat qui s'apparente plutôt à du setVisibility(View.INVISIBILITY); ...

    Y a-t-il une erreur de débutante là-dessous ?

    Petite précision:
    dans mon activity, j'ai le bout de code suivant (des fois que ça viendrait d'une mauvaise utilisation de SimpleAdapter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ListAdapter monAdapter;
    ...
    monAdapter= new MonSimpleAdapter(this, maliste, R.layout.monLayout,new String[] {"a","b","c"},new int[] {R.id.a, R.id.b, R.id.c});
     
    listeEffective.setAdapter(monAdapter);
    Merci d'avance

  2. #2
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Et dans le getView, tu as quel code ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    Dans le getView j'ai un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Override  
        public View getView(int position, View convertView, ViewGroup parent) {  
     
    		View view = super.getView(position, convertView, parent);
     
    		String societe = mStrings.get(position).get("societe");
     
    		if ( societe.equals("Bidule") {
    		   view.setVisibility(View.GONE);
    		}
     
            return view;  
        }
    Je précise aussi que j'ai les layout suivant (des fois que)
    societe.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:layout_width="fill_parent"
        android:orientation="vertical" android:layout_height="fill_parent">
     
    	<ListView
            android:id="@+id/listviewSociete"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
     
    </LinearLayout>
    et l'autre layout: societe_listview.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
    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
     
    <?xml version="1.0" encoding="utf-8"?>
     
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="70dp"
        android:orientation="horizontal"
        android:background="@color/white" >
     
        <LinearLayout
            android:layout_width="65dp"
            android:layout_height="wrap_content"
            android:orientation="vertical" 
            android:layout_marginTop="5dp"
            android:layout_marginLeft="23dp" >
     
     
    		<TextView
    		    android:id="@+id/societe"
    		    android:layout_width="fill_parent"
    		    android:layout_height="wrap_content"
    		    android:textSize="14sp"
    		    android:maxLength = "6"
    		    style="@style/TextBoldWhite"
    		    android:gravity="center_vertical|center_horizontal"/>
     
     
        </LinearLayout>
     
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="vertical"
            android:layout_marginTop="5dp" >
     
    	    <TextView
    		    android:id="@+id/Organisme"
    		    android:layout_width="wrap_content"
    		    android:layout_height="wrap_content"
    		    android:textSize="14sp" 
    		    android:singleLine="true"
    		    style="@style/TextBoldBlack"
    		    />
     
    	</LinearLayout>
     
    </LinearLayout>

  4. #4
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Du fait du mécanisme des AdapterView de réutilisation des vues, il faut à minima que tu modifies la méthode getView
    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
    @Override  
        public View getView(int position, View convertView, ViewGroup parent) {  
     
    		View view = super.getView(position, convertView, parent);
     
    		String societe = mStrings.get(position).get("societe");
     
    		if ( societe.equals("Bidule") {
    		   view.setVisibility(View.GONE);
    		}
                    else {
                       view.setVisibility(View.VISIBLE);
                    }
     
            return view;  
        }
    Ceci est du au fait que les vues qui correspondent à une entrée de la liste sont réutilisées lorsque tu scrolles, et on ne peut donc être sûr de l'état des composants de la vue

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    Bah... pas mieux.

    Par contre, je ne sais pas si j'étais pressée de partir lundi soir, mais je me suis aperçue que je n'ai pas tout posté sur l'adapter, donc, je reprends...
    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
     
    @Override  
        public View getView(int position, View convertView, ViewGroup parent) {  
     
    		View view = super.getView(position, convertView, parent);
     
    		String societe = mStrings.get(position).get("societe");
     
    		if (societe.equals("Bidule")) {
    			view.setVisibility(View.GONE);
    		}
    		else {
    			view.setVisibility(View.VISIBLE);
    		}
     
    		TextView text = (TextView) view.findViewById(R.id.matricule);
     
            String etatFonct = mStrings.get(position).get("etat");
     
            if ( Status.OCCUPE.toString().equals(etat) ) {
            	text.setBackgroundResource(R.color.blue);
            }
            else if ( Status.INDISPONIBLE.toString().equals(etat) ) {
            	text.setBackgroundResource(R.color.black);
            }
     
            return view;  
        }
    Pour le truc des couleurs, ça marche nickel.
    Pour la visibilité, ça ne marche toujours pas...

  6. #6
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Je me demande si le problème ne viendrai pas finalement de ton layout (societe_listview.xml). Tu fais le View.GONE sur le TextView "societe", mais le LinearLayout qui le contient reste toujours là, et comme tu lui forces sa largeur, la place qu'il prend reste toujours la même, même si son contenu n'est plus visible, d'où ton impression d'avoir fait un View.INVISIBILITY
    Petite remarque sur ton layout: l'imbrication de LinearLayout n'est pas nécessairement utile (et de plus coûteuse en ressources); tu pourrais faire pareil avec un seul Layout (regarde du côté des RelativeLayout par ex.)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    J'avais supputé cela à un moment donné, mais sans m'en sortir... Je vais regardé de plus près et je vous tiens au courant.
    Et je vais regardé la notion de relativeLayout que je ne connais pas trop

    Merci

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    Alors, j'ai tenté... et... ça n'a pas marché !


    Alors mon layout societe_listview.xml, ressemble à ça maintenant:

    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
     
    <?xml version="1.0" encoding="utf-8"?>
     
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="70dp"
        android:background="@color/white" 
        android:id="@+id/relativeLayoutSocieteListView">        
     
    		<TextView
    		    android:id="@+id/societe"
    		    android:layout_width="wrap_content"
    		    android:layout_height="wrap_content"
    		    android:textSize="14sp"
    		    android:maxLength = "6"
    		    style="@style/TextBoldWhite"
    		    android:gravity="center_vertical|center_horizontal"
                        android:layout_marginLeft="20dp"/>
     
    		<TextView
    		    android:id="@+id/organisme"
    		    android:layout_width="50dp"
    		    android:layout_height="wrap_content"
    		    android:textSize="14sp"
    		    android:maxLength = "6"
    		    style="@style/TextBoldBlack"
    		    android:layout_above="@id/societe"/>		
     
    </RelativeLayout>
    une idée?

  9. #9
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Et qu'est-ce qui n'a pas marché, exactement ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    J'ai toujours le même effet qu'avant avec le setvisibity(View.GONE) décrit dans mon post initial.

    J'ai toujours un résultat qui s'apparente plutôt à du setVisibility(View.INVISIBILITY);

  11. #11
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Bonjour,

    Une facon simple de masquer un item et de ne pas l'afficher
    Du coup pas besoin de manipuler des visibility et compagnie!

    Il te suffit soit de modifier ta liste pour supprimer les items que tu ne veux pas afficher, soit de faire un test lors de l'affichage de l'item dans la fonction getView de ton adapter pour ne pas inclure ton item à la liste!

  12. #12
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Méa culpa, je n'avais effectivement pas bien lu la question. Il ne s'agit pas de masquer une partie d'un élément de la liste comme je l'avais compris, mais de ne pas afficher certains éléments de la liste. Dans ce cas, le View.GONE ne fonctionne effectivement pas. Il est effectivement plus simple de ne pas inclure l'élément dans la listse pour qu'il ne soit pas affiché

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    J'y avais pensé, mais je trouvais ça moins "beau" et je pensais que j'utilisais mal de setvisibility...

    Bon, bah, merci quand même

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/02/2004, 19h14
  2. [SYBASE] Insert sur view
    Par P'tit Jean dans le forum Sybase
    Réponses: 4
    Dernier message: 31/10/2003, 12h21
  3. Tree View avec XML et XSL
    Par Drooxy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/04/2003, 10h21
  4. Réponses: 6
    Dernier message: 21/06/2002, 14h48
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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