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 :

Mettre un espace avant certaines lignes d'une Listview


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut Mettre un espace avant certaines lignes d'une Listview
    Bonjour,

    J'ai une listview dont chaque ligne est constituée de plusieurs textes. L'un d'eux désigne une catégorie, que j'affiche dès lors qu'il est différent du précédent. En plus de cette contrainte, je veux décaler la nouvelle catégorie pour faire plus joli. j'ai donc ajouté un padding comme indiqué en gras:
    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
    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    	if (convertView == null) {
    
    	    convertView = LayoutInflater.from(context).inflate(
    		    R.layout.ir_item, parent, false);
    	}
    
    	TextView group = ViewHolder.get(convertView, R.id.data1);
    	TextView range = ViewHolder.get(convertView, R.id.data2);
    	TextView assignment = ViewHolder.get(convertView, R.id.data3);
    	LinearLayout linear = ViewHolder.get(convertView, R.id.line); //c'est le linearlayout parent des lignes
    
    	HashMap<String, String> item = getItem(position);
    	if (position > 0) {
    	    if (item.get(GROUP).equals(getItem(position - 1).get(GROUP))) {
    		group.setText("");
    	    } else {
    		linear.setPadding(0, 10, 0, 0);
    		group.setText(item.get(GROUP));
    	    }
    	} else {
    	    group.setText(item.get(GROUP));
    	}
    	range.setText(item.get(RANGE) + " (" + item.get(INTENSITY) + ")");
    	assignment.setText(item.get(ASSIGNMENT));
    
    	return convertView;
        }
    }
    Ca marche en première page, mais dès que je fais défiler la liste, que je revienne.... le padding se crée sur toute les lignes, et je perd mon effet d'espacement. J'ai l'impression que c'est la condition qui n'est pas juste, mais je ne vois pas ce qui cloche.

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Mais effectivement à première vue, je ne vois aucune erreur !

    Tu devrais te place en mode debug sur cette méthode pendant que tu retour sur tes éléments qui ne sont plus affiché.
    Je pense que tu sera surpris du comportement.
    Regarde particulièrement ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	    if (item.get(GROUP).equals(getItem(position - 1).get(GROUP))) {
    Ce qui m'étonne, c'est que tu n'ai pas en plus l'affichage des groupes. Logiquement les deux sont déclenché au même endroit !

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    J'ai résolu mon problème. L'idée est de surcharger les méthodes getItemViewType et getViewTypeCount de mon Adapter, comme dans cet exemple. Après, je crée un xml différent pour les 2 types de lignes, et j'inflate mon xml voulu selon la position de l'item.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/08/2008, 15h48
  2. Espace involontaire entre lignes d'une image découpée
    Par joviper dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/01/2007, 11h30
  3. Changer la couleur de certaines lignes ds une liste
    Par Ragnarok85 dans le forum Access
    Réponses: 4
    Dernier message: 04/01/2007, 10h18
  4. Copier certaines lignes d'une table vers une autre
    Par TNorth dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/07/2006, 14h31
  5. Réponses: 1
    Dernier message: 29/11/2005, 00h37

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