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 :

Id des views dans une ListView


Sujet :

Composants graphiques Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Id des views dans une ListView
    J'ai une listview avec 2 chexboxs (checkbox3 et checkbox4). Je veux que quand je clique sur un checkbox4, checkbox3 qui est dans le même item (dans la même ligne de la liste) soit checked aussi. Mais le résultat que j'ai est que quand je clique sur un checkbox4 dans n'importe quelle ligne, c'est le checkbox3 de la première ligne qui est coché, et pas celui de la même ligne!

    Le code du checkbox4 dans le xml:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            <CheckBox
                android:id="@+id/checkBox4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="CheckBox" 
                    android:onClick="handler"
                />

    Le code de la fonction handler:

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void handler(View v) {
     
         CheckBox rb = (CheckBox) findViewById(R.id.checkBox3);
     
         rb.setChecked(true);
     
    }

    Quelqu'un a une idée? Comment indiquer que le checkbox à cocher est celui dans le même item? (alors que l'id est le même dans toutes les lignes, non?)

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Si tu as bien fait ta ListView, tu devrais avoir un holder pour conserver/rappeler les données et références lors de ton inflate.
    Dans ce cas-là, tu as simplement à lier la checkbox correspondante.

    Si tu n'as pas fait ainsi, il faudra voir plus de code pour t'aider, celui de la ListView et de la gestion de ses items.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Pour la listview, j'ai juste ça:

    Code Java : 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
     
    maListViewPerso = (ListView) findViewById(R.id.listView1);
     
    ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
     
    HashMap<String, String> map;
     
    map = new HashMap<String, String>();
    map.put("titre", "pseudo1");
    map.put("description", "...");
    map.put("img", String.valueOf(R.drawable.social_person));
     
    listItem.add(map);
     
    map = new HashMap<String, String>();
    map.put("titre", "pseudo2");
    map.put("description", "...");
    map.put("img", String.valueOf(R.drawable.social_person));
     
    listItem.add(map);
     
              (...)
     
     
    SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.affichageitem,
    new String[] {"img", "titre", "description"}, new int[] {R.id.img, R.id.titre, R.id.description});
     
    maListViewPerso.setAdapter(mSchedule);
    maListViewPerso.setItemsCanFocus(true);

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Le SimpleAdapter est, comme son nom l'indique : simple, voire même simpliste.

    Pour ce que tu souhaite réaliser, je te conseille de regarder du coté des BaseAdapter, qui te permettront (assez facilement) de customiser à souhait le comportement de ta ListView. A partir de là, le conseil de Hizin prendra tout son sens.

    Sinon, ce que je te déconseille de faire mais qui est tout de même réalisable c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void handler(View v) {
    int index = 0; /* Ici l'index de ta checkbox identifiée par R.id.checkBox3 dans son conteneur */
    (CheckBox)(v.getParent().getChildAt(index)).setChecked(true);
    }

    Enfin, attention, les identifiants des vues doivent être uniques. Et là ce n'est pas le cas, ils sont répliqués à chaque ligne de ta liste.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Avec le BaseAdapter, comment on peut le faire? En appelant getView? sur quelle instance?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    La méthode getView est appelée automatiquement.
    Il te suffit d'associer cet Adapter à ta ListView dans le onCreate par exemple.

    http://theopentutorials.com/tutorial...g-baseadapter/

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    J'utilise un BaseAdapter comme dans le tutoriel maintenant, mais je ne trouve toujours pas comment ça résout le problème

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Lorsque tu instancie ton Holder, tu peux directement affecter tes listeners.

  9. #9
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Décembre 2007
    Messages : 94
    Points : 134
    Points
    134
    Par défaut
    Dans la méthode getView de ton adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    holder.checkBox4.setOnClickListener(new OnClickListener() {
     
    			@Override
    			public void onClick(View v) {
    				//Ici le traitement que tu veux
    //entre autre cocher checckBox3
     
     
    			}
     
    		});
    Bien entendu tu peux utiliser d'autres listeners pour ton checkBox

Discussions similaires

  1. Reprendre des données dans une listview (c#)
    Par miky-mike dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/05/2010, 11h48
  2. Insérer des données dans une ListView
    Par Vincinho dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/05/2010, 17h08
  3. Chargement des images dans une ListView
    Par loudo dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 09/05/2010, 22h03
  4. Afficher des images dans une listView de manière asynchrone
    Par badaboo dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 23/02/2010, 09h47
  5. Afficher des informations dans une ListView
    Par revero275 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/04/2007, 21h58

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