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

Android Discussion :

Custom List Adapter et bonnes pratiques


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Custom List Adapter et bonnes pratiques
    Bonjour,

    Je débute sous Android et je m'adresse à vous à travers ce post dans l'optique d'obtenir de votre part des conseils ou bonnes pratiques concernant les listes personnalisées.

    Afin de vous présenter le contexte dans lequel je suis, je vous décris rapidement le scénario qui me concerne:

    Je récupère via une api les données de plusieurs projets afin de créer un liste d'items projet (un item donc un élément de la liste étant composé du titre du projet et d'une description).

    Lorsque je clique (ou touche comme vous voulez) un des item, une autre activité se lance composée elle aussi d'une liste d'items séquence du projet sélectionné (les données sont aussi récupérées via une api). Un item est cette fois composé d'un titre et d'une image.

    Je me pose la question à savoir si je dois créer une classe CustomListAdapter générale ou une classe pour chaque liste. J'ai testé la 2ème solution avec succès mais j'ai pas mal de duplication de code d'où ma question. J'ai pas encore pris le temps d'essayer la première solution, mes connaissances étant encore limitées (et j'ai ne sais même pas si c'est réalisable...)

    Je me suis inspiré de ce tuto pour réaliser cette partie de mon appli.

    Si vous avez des conseils à me donner, ou des ressources à me fournir n'hésitez pas

    Merci

    Cyril

  2. #2
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Bonjour,

    Je pense que le choix dépend principalement de la complexité de ton application.

    Sur un petit projet ou tu n'affiche que 2 list quasiment similaire, cela peut être intéressant d'utiliser une adapter générique (tu peux le faire en jouant sur la visibilité de tes vues).

    Par contre, réalise bien qu'a chaque particularité que tu voudras ajouter dans une de tes list (écrire le texte en rouge ou en noir par exemple ou mettre le texte en 12sp ou en 16sp), cela va rendre de moins en moins lisible ton adapter.

    Si tu choisi correctement le nom de tes adapter (le nom de tes classes doit être pris en compte dans la propreté de ton code) et que tu répertorie dans des package ordonné, cela ne pose pas de problème d'avoir un adapter/list (de mon point de vue). Surtout si chaque list a des spécificités d'affichage (comme je l'ai dit, cela peut vite devenir le bazard de regrouper plusieurs list dans un adapter).

    Pour finir, ton lien me renvoi une 502, du coup j'ai pas pu regarder le fonctionnement de tes list.
    Les ListView seront dans un futur plus ou moins proche remplacé par les RecyclerView (qui n'ont pas exactement le même fonctionnement qu'une ListView), tu devrais peut être regarder directement cette classe si tu veux commencer Android.

    GL HF!!

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour Altak,

    Je te remercie pour ta réponse.

    Je vais partir du principe que mon appli va évoluer donc il est plus pertinent de construire chaque liste à partir d'un adapter qui lui est propre (et tant pis pour la duplication...). De plus, ça sera d'autant plus simple à tester... En lisant ta réponse, je suis conforté dans ma vision de la programmation consistant à favoriser la lisibilité de mon code plutôt que l'optimisation et la recherche de performance à tout prix (performance qui n'est pas toujours significative d'ailleurs). En attendant d'avoir le niveau pour produire un code lisible et performant .

    Je laisse le sujet encore un peu ouvert histoire d'avoir d'autres contributions/avis éventuels.

    (sinon le lien fournit dans mon poste précédent semble remarcher)

    Merci

    Cyril

  4. #4
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Re,

    De mon point de vue, en dehors d'exception (comme une application a fort trafique par exemple), un bon code est une bonne balance entre code compréhensible et optimisation.
    Je ne vois pas l’intérêt d'optimiser ton code a mort si il devient extrêmement complexe et lisible que par toi, surtout que tu as beaucoup d'optimisation différente(mémoire, temps d’exécution, bande passante, etc...).

    Pour ton lien, j'ai toujours une 502... c'est bizarre :O

    Je vais te donner un exemple de mes Adapter (je vois fréquemment des erreurs dans des tuto) :

    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
     
    public class ListAdapter extends ArrayAdapter<Item> {
     
        public ListAdapter(Context context, List<Item> items) {
            super(context, R.layout.list_layout_item, R.id.title_item_textiew, items);
        }
     
        @Override
        public View getView(int position, View view, ViewGroup parent) {
            View rootView = super.getView(position, view, parent);
     
            TextView text = (TextView) rootView.findViewById(R.id.title_item_textiew);
            text.setText(super.getItem(position).getName());
     
            return rootView;
        }
    }
    Le 3éme paramètre du super() doit être l'id d'un textView qui est contenu dans ton layout (2éme paramètre).
    Dans ton cas, ce paramètre ne te sert a rien mais le système en a besoin

    GL HF

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Re,

    Merci pour ton exemple. Pour ma part j'ai construit mon adapter en étendant la classe BaseAdapter.

    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
    49
    50
    51
    52
    53
    54
    55
    56
    public class ProjectsListAdapter extends BaseAdapter {
     
        private Activity activity;
        private LayoutInflater inflater;
        private List<Project> projectItems;
        ImageLoader imageLoader = AppController.getInstance().getImageLoader();
     
        public ProjectsListAdapter(Activity activity, List<Project> projectItems) {
            this.activity = activity;
            this.projectItems = projectItems;
        }
     
        @Override
        public int getCount() {
            return projectItems.size();
        }
     
        @Override
        public Object getItem(int location) {
            return projectItems.get(location);
        }
     
        @Override
        public long getItemId(int position) {
            return position;
        }
     
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
     
            if (inflater == null)
                inflater = (LayoutInflater) activity
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (convertView == null)
                convertView = inflater.inflate(R.layout.list_row_projects, null);
     
            if (imageLoader == null)
                imageLoader = AppController.getInstance().getImageLoader();
            NetworkImageView thumbNail = (NetworkImageView) convertView
                    .findViewById(R.id.thumbnail);
     
            TextView title = (TextView) convertView.findViewById(R.id.title);
            TextView description = (TextView) convertView.findViewById(R.id.description);
     
    //        getting project data for the row
            Project m = projectItems.get(position);
     
            title.setText(m.getTitle());
     
            description.setText(m.getDescription());
     
            thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);
     
            return convertView;
        }
    }
    Etant débutant, je ne maitrise pas ArrayAdapter et SimpleAdapter et donc je ne sais pas ce qu'il est possible de faire avec ces classes et encore moins leur limite. Je suis donc parti de BaseAdapter en me disant que j'allais pouvoir customiser ma liste comme je veux, après j'ai peut être utilisé un marteau pour écraser une mouche...

    (Pour le lien, il y a effectivement une erreur 502... bizarre car il était accessible hier soir)

    Cyril

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

Discussions similaires

  1. [Débutant] VB.net WPF : bonne pratique ? (Observablecollection List(of ) data binding)
    Par Gloubi99 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 01/06/2015, 13h26
  2. Bonnes pratiques de protections individuelles
    Par Community Management dans le forum Sécurité
    Réponses: 22
    Dernier message: 05/04/2013, 11h47
  3. Bonne pratique méthode qui renvoie une liste/tuple
    Par manticore dans le forum Général Python
    Réponses: 5
    Dernier message: 13/12/2011, 14h42
  4. [Bonnes pratiques JSF] liste déroulante
    Par scorplayer dans le forum JSF
    Réponses: 8
    Dernier message: 11/05/2010, 17h23

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