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 :

Créer une nouvelle instance de vue en utilisant findViewById dans une boucle


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut Créer une nouvelle instance de vue en utilisant findViewById dans une boucle
    Bonjour à tous,

    J'ai créer une custom relativeLayout puis je crée des vues dynamiquement au fur et à mesure des données que je reçois.
    voici un example de code:
    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
     for (int i = 0; i <3; i++) {
                RelativeLayout firstLayout = new RelativeLayout(this);
                RelativeLayout.LayoutParams firstLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
                firstLayout.setId(1 +i);
                firstLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
                firstLayoutParams.addRule(RelativeLayout.BELOW, firstLayout.getId() -1);
                firstLayoutParams.setMargins(0, 20, 0, 0);
                firstLayoutParams.addRule(RelativeLayout.ALIGN_LEFT, firstLayout.getId() -1);
     
                firstLayout.setLayoutParams(firstLayoutParams);
     
                ImageView imageView = new ImageView(this);
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.play_station_4));
                RelativeLayout.LayoutParams imageViewParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
                imageView.setId(1);
                imageViewParams.addRule(RelativeLayout.ALIGN_LEFT);
                imageViewParams.addRule(RelativeLayout.ALIGN_TOP);
                imageView.setLayoutParams(imageViewParams);
     
     
                TextView title_txt = new TextView(this);
                RelativeLayout.LayoutParams title_txtParams = new RelativeLayout.LayoutParams(250,RelativeLayout.LayoutParams.WRAP_CONTENT);
                title_txtParams.addRule(RelativeLayout.RIGHT_OF, imageView.getId());
                title_txtParams.addRule(RelativeLayout.ALIGN_TOP);
                title_txt.setId(8);
                title_txt.setLayoutParams(title_txtParams);
                title_txtParams.setMargins(10, 0, 0, 0);
                title_txt.setText("Sisley Chantal, sac porté main - Noir (Black, Taille unique)");
     
                TextView price_txt = new TextView(this);
                RelativeLayout.LayoutParams price_txtParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
                price_txtParams.addRule(RelativeLayout.RIGHT_OF, title_txt.getId());
                price_txtParams.addRule(RelativeLayout.ALIGN_TOP);
                price_txt.setId(5);
                price_txt.setLayoutParams(price_txtParams);
                price_txtParams.setMargins(20, 0, 0, 0);
                price_txt.setText("EUR 75,00");
     
     
                TextView quantity_txt = new TextView(this);
                RelativeLayout.LayoutParams quantity_txtParams = new RelativeLayout.LayoutParams(50,50);
                quantity_txtParams.addRule(RelativeLayout.ALIGN_LEFT,title_txt.getId());
                quantity_txtParams.addRule(RelativeLayout.BELOW, title_txt.getId());
                quantity_txt.setId(54);
                quantity_txt.setLayoutParams(quantity_txtParams);
                quantity_txtParams.setMargins(10, 10, 0, 0);
                quantity_txt.setText("2");
     
     
                firstLayout.addView(quantity_txt);
                firstLayout.addView(title_txt);
                firstLayout.addView(price_txt);
                firstLayout.addView(imageView);
     
                relativeLayout.addView(firstLayout, firstLayoutParams);
    		}

    Je trouve que c'est peu lisible même si ça fonctionne parfaitement, donc je voudrais m'orienter vers une approche en xml et je sais qu'on peux ajouter un layout à ma customRelativeLayout en faisant un inflate de ce dernier dans le constructeur.

    Ce que je cherche actuellement c'est crée une nouvelle instance de vue dans une boucle avec findViewById.

    par exemple dans la boucle précédente j'aurais quelque chose qui ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (int i = 0; i <3; i++) {
    ImageView img =  (ImageView)findViewById(R.id.mon_image_view);
    }
    Mais le fait est que j'ai toujours la même instance de vue à chaque itération. Est ce que cette approche est possible à votre avis ? Je voudrais reproduire le même mécanisme que dans une listView sans le recyclage de vue.
    Merci de votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 149
    Par défaut
    Crée un array de imageview et à chaque itération ajoute ta vue dans l'array.Commme ça il te suffit de récupérer la vue grâce a la position de celle ci.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    Très bonne idée c'est valable pour toutes les vues je supposes ?
    Merci pour votre réponse

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 149
    Par défaut
    Pour citer la doc :
    All elements are permitted, including null.
    donc oui

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    Supposons que dans mon layout j'ai plusieurs type de vue ImageView, TextView et Button, dois je créer un type de tableau pour chaque vue ?
    par exemple:
    ImageView[],TextView[], Button[] ou bien est ce que je peux créer simplement un tableau View[] ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 149
    Par défaut
    Ba tu peux créer un tableau pour chaque type mais moi je pensais plutôt à une ArrayList, normalement ça te permet de stocker n'importe quel type d'élément dans la même liste.

Discussions similaires

  1. [XL-2010] Suppression d'une ligne dans une feuille A tout en garder les infos dans une feuille B
    Par sebastien_ofs dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/01/2015, 12h10
  2. Réponses: 13
    Dernier message: 23/05/2013, 20h38
  3. Oracle dans une nouvelle bataille juridique sur l'utilisation du Java
    Par Hinault Romaric dans le forum Général Java
    Réponses: 16
    Dernier message: 17/12/2010, 16h01
  4. Oracle dans une nouvelle bataille juridique sur l'utilisation du Java
    Par Hinault Romaric dans le forum Actualités
    Réponses: 14
    Dernier message: 16/12/2010, 17h30
  5. Réponses: 1
    Dernier message: 31/08/2009, 22h48

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