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 :

Adapter ListView custom


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 67
    Par défaut Adapter ListView custom
    bonjour, j"essaye mettre un image différente en fonction des donnes pour une list view mais sa ne fonctionne pas.
    par exemple je voudrais mettre un telephone quand c"est l'élèment phone de la personne.

    merci.

    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
    public class MyAdapter extends ArrayAdapter<Person> {
     
        private final Context context;
        private final List  values;
     
        public MyAdapter( Context context, List values) {
            super(context,R.layout.row,values);
            this.context = context;
            this.values = values;
     
        }
     
     
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     
            View rowView = inflater.inflate(R.layout.row, parent, false);
            TextView textView = (TextView) rowView.findViewById(R.id.textView);
            ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);
            textView.setText(values.get(position).toString());
     
            // Change icon based on name
            String s = values.get(position).toString();
     
            Log.i("liste value",values.get(position).toString());
     
            Person p = (Person) values.get(position);
     
            p.setName(s);
            if (s.equals(p.getName()))
                imageView.setImageResource(android.R.drawable.sym_action_email);
     
            return rowView;
        }
    }

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Bonjour,
    j"essaye mettre un image différente en fonction des donnes pour une list view mais sa ne fonctionne pas.
    Tu as un message d'erreur?

    Christian,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 67
    Par défaut oui j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    05-14 18:59:38.315  27771-27771/com.exo.firstapplication.testlistview E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.exo.firstapplication.testlistview, PID: 27771
        java.lang.ClassCastException: java.lang.String cannot be cast to com.exo.firstapplication.testlistview.Person

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 67
    Par défaut
    En faite ce que je veux faire c'est afficher les info d'un objet personne dans une listview mais je veux que l’orque c'est un numéro de téléphone sa affiche un petit téléphone en icon et lorsque c'est une adresse email sa affiche un petit icon email.

  5. #5
    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
    Je trouve qu'il y a des choses bizarres dans le getView....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     
            View rowView = inflater.inflate(R.layout.row, parent, false);
            TextView textView = (TextView) rowView.findViewById(R.id.textView);
            ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);
    L'interêt de ListView est la réutilisation des views existantes et plus visibiles... ici, non seulement on ne s'en sert pas, mais en prime, on fait des opérations longues (getSystemService / inflate) à chaque fois.... à remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        View rowView = super.getView(position,convertView,parent);
        TextView textView = (TextView) rowView.findViewById(R.id.textView);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);
    Ainsi le code "par défaut" de ArrayAdapter sera utilisé....

    Ensuite il y a plein d'appels à :
    Je ne vois pas l'interêt de stocker la liste de persons (au passage ce devrait être List<Person> et non List tout court => ce devrait être un gros warning de l'IDE normalement) quand ArrayAdapter le fait déjà.

    Ceci récupèrera l'objet "Person" correspondant à la view créée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Person p = getItem(position);
    Après je comprends plus rien. Si on remplace tous les "values.get(position)" par "p":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
             textView.setText(p.toString());  // <= ok on met dans "textView" la représentation "string" de p  
     
            // Change icon based on name
            String s = p.toString();  // <= en fait, on aurait pu faire ceci *avant* et just faire textView.setText(s);
     
            Log.i("liste value",p.toString()); // <= encore "
     
            p.setName(s); // <= on change les données ?????????????????????????? ce n'est pas le rôle de l'adapter !!!
            if (s.equals(p.getName()))    /// <= p.getName() devrait renvoyer à priori s dans tous les cas non ?
                imageView.setImageResource(android.R.drawable.sym_action_email);
            // il manque le "else" quelle image sinon ?

Discussions similaires

  1. Recherche une librairie ou solution pour une ListView custom
    Par skypaps dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 15/01/2014, 16h34
  2. Problème adaptation ListView
    Par Pepito39 dans le forum Composants graphiques
    Réponses: 12
    Dernier message: 12/06/2013, 17h55
  3. Adaptation ListView
    Par ruyeken dans le forum Composants graphiques
    Réponses: 7
    Dernier message: 02/01/2013, 17h33
  4. ListView custom
    Par Jazys dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 23/02/2012, 18h06
  5. load img web --> custom adapter --> listview
    Par jonathantarabbia dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 29/04/2011, 16h02

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