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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    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 expérimenté 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
    Par défaut
    Et dans le getView, tu as quel code ?

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    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 expérimenté 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
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 129
    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 expérimenté 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
    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.)

+ 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