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 :

Bug d'affichage ListView


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Developpeur Android
    Inscrit en
    Juin 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 65
    Par défaut Bug d'affichage ListView
    Bonsoir.

    Je me tourne vers vous ce soir car j'ai un problème assez bizarre, que je cherche à résoudre depuis 1 semaine sans succès.

    Cela m'arrive en fait sur 1 ListView et 1 GridView.

    tout d'abord la ListView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lv = (ListView) findViewById(R.id.activiteJour);
    items  = new ArrayList<UneActivite>();
    // Je remplis items avec des UneActivite
    adapter = new CustomListViewAdapter(this, items);
    lv.setAdapter(adapter);
    J'ai la possibilité de supprimer des activités de cette ListeView en cliquant dessus.
    Le problème donc avec cette ListView c'est que quand je stock 3 activités ou plus dans la ListView (la limite pour la ScrollBar vertical) et que j'en supprime une (ou plusieurs), elles sont bien supprimées de la ListView et de items, seulement il persiste un bug d'affichage.
    Les activités que j'ai supprimé reste affichées comme si elles étaient "collées" à l'écran. Je ne peut pas cliqué dessus, c'est juste un bug d'affichage.
    Pour l'enlever, je dois changer d'activity android.

    Un petit screen vaut mille mots :



    Désolé pour la qualité de l'image, mais j'ai pris cette photo sur ma tablette, car ce bug d'affichage n'apparait que sur ma tablette et pas sur l'émulateur (encore plus bizarre)

    On voit bien que pour le jeudi 20 juin, j'ai une activité "Séance Aquagym" (celle ci est valide) et un résidu d'affichage qui prend la place de la 3eme activité de la journée (je ne peut pas cliqué dessus)

    Même en changeant de journée avec les flèches à coté de la journée, cet affichage reste, je suis obligé de changé d'activity android pour l'effacer.


    Je serai sûrement l'homme le plus heureux du forum si quelqu'un pouvait résoudre ce problème.

    P.S : si je spam le fofo avec mes questions, c'est parce que je dois rendre ce projet jeudi 27 juin au matin

    EDIT : pour la GridView, c'est le même principe mais sans scrollbar, quand je supprime un element, il reste affiché mais je ne peut plus cliquer dessus.

    EDIT 2 : faudrait-il chercher du coté du else dans le getView() de l'adapteur ?

    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
     public View getView(final int position, View convertView, ViewGroup parent) 
        {  
     
        	UneActivite item = items.get(position);
     
        	View vi=convertView;
     
     
     
            if(convertView==null)
            {
                vi = inflater.inflate(R.layout.item_row, null);
     
            }
            else 
            {
            	?????
            }
     
     
            TextView txtTitre = (TextView) vi.findViewById(R.id.txtTitre);
            TextView txtHD = (TextView) vi.findViewById(R.id.txtHeureDebut);
            TextView txtHF = (TextView) vi.findViewById(R.id.txtHeureFin);
            TextView txtLieu = (TextView) vi.findViewById(R.id.txtLieu);
            TextView txtDesc = (TextView) vi.findViewById(R.id.txtDesc);
     
            txtTitre.setText(item.getTitre());
            txtHD.setText(item.getHeureDeb());
            txtHF.setText(item.getHeureFin());
            txtLieu.setText(item.getLieu());
            txtDesc.setText(item.getDescription());
     
            return vi;  
        }

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut
    Salut,

    dans ton else tu ne dois rien mettre, c'est bien d'utiliser la convertView, ca évite d'instancier inutilement une nouvelle View.

    En fait tu ne met rien dans le else car convertView est une instance de Vue comportant exactement les même composants que tout ce qu'il y a dans ton "item_row".

    Pour la suppression j'aimerai voir comment tu procèdes.
    La bonne pratique serait de supprimer l'activité (UneActivite) de la liste (items) des activités. Et ensuite d'appeler la méthode (lv.invalidateViews()). Attention d'enlever le "UneActivite" de la liste qui est utilisée par l'adapter et non pas une copie.

  3. #3
    Membre confirmé
    Homme Profil pro
    Developpeur Android
    Inscrit en
    Juin 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 65
    Par défaut
    Bonsoir.
    Merci de répondre.

    Pour supprimer, je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    items.remove(items.get(position));
    // Je supprime donc l'activité comme tu le dis ^^ 
    adapter.notifyDataSetChanged();
    Je ne fait pas appelle à la méthode que tu précise, de quoi s'agit il ?

    EDIT : j'ai utilisé la méthode lv.invalidateViews() à la place de adapter.notifyDataSetChanged() mais cela ne change rien.

  4. #4
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Oui, mais "items.remove(items.get(position));" va enlever l'objet de la liste "items", mais quid de la liste à l'interieur de l'adapter ?

    On peut voir le code de l'adapter ? (en particulier le constructeur à base de List). Si l'adapter maintient sa propre liste, items.remove ne touchera pas à l'adapter.

Discussions similaires

  1. Bug affichage ListView
    Par VitamineC dans le forum IHM
    Réponses: 1
    Dernier message: 03/05/2007, 12h31
  2. [W3C] [IE] bug d'affichage
    Par sidero dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 18/05/2005, 15h45
  3. [AWT] Bug d'affichage
    Par deathwing dans le forum Composants
    Réponses: 3
    Dernier message: 17/05/2004, 17h39
  4. [TP]TP7/XP : bug d'affichage
    Par art dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/04/2004, 22h20

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