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 :

Une variable dans un nom pour une image ? setImageResource(R.drawable.nomquichange);


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    Par défaut Une variable dans un nom pour une image ? setImageResource(R.drawable.nomquichange);
    voila j'ai une base de donnée qui m'envoit plusieures infos dont une qui m'intresse pour savoir combien de photo j'ai pour cet élement: 0, 1, 2 ou 3.
    J'aurai voulu donc suivant le nombre de photo afficher soit une image disant que je n'ai pas d'image soit intégrer une image coorespondante à l'élément voulu.

    J'ai essayé de faire un code comme cela mais evidement cela ne fonctionne pas auriez vous une idée?


    c.getString(8) étant le résultat de ma requete d'identification produit afin de savoir quelles images afficher
    test étant celui de ma requete du nombre d'image à afficher éventuellement 0, 1, 2 ou 3

    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
     
    String pictos1 = "image"+c.getString(8)+"a";
    String pictos2 = "image"+c.getString(8)+"b";
    String pictos3 = "image"+c.getString(8)+"c";
     
                 if ( test=="1" )
    	{
    	            pict1 .setImageResource(R.drawable.+pictos01+);
                             pict2 .setImageResource(R.drawable.noimage);
                             pict3 .setImageResource(R.drawable.noimage);
    	} else if if ( test=="2" ) {
     
    		pict1 .setImageResource(R.drawable.+pictos01+);
                             pict2 .setImageResource(R.drawable.+pictos02+);
                             pict3 .setImageResource(R.drawable.noimage);
     
    	} else if if ( test=="3" ) {
     
    		pict1 .setImageResource(R.drawable.+pictos01+);
                             pict2 .setImageResource(R.drawable.+pictos02+);
                             pict3 .setImageResource(R.drawable.+pictos03+);
     
    	}
                 } else {
    		pict1 .setImageResource(R.drawable.noimage);
                             pict2 .setImageResource(R.drawable.noimage);
                             pict3 .setImageResource(R.drawable.noimage);
    	}
    Une idée?
    D'avance merci.

  2. #2
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    test=="1" ne fonctionne pas....

    Le "==" compare l'identité de deux objets, pas leur contenu... Ainsi deux "carrés" peuvent être différents en terme d'objets (on a deux carrés) et pourtant identiques entre eux... c'est le cas pour les chaines de caractères "String" et *toutes* les références Java.

    Il faut utiliser: test.equals("1") pour que cela fonctionne.

    Maintenant, si le résultat est 0,1,2 ou 3... pourquoi avoir une "String" ? Autant conserver un "int" non ? Auquel cas le code devient une affaire de switch/case:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    switch (test) {
      case 1:  ....
                  break;
      case 2:  ....
                  break;
      ...
      default:  ....
                   break;
    }
    Ensuite Java étant un langage fortement typé, de quel type pourrait bien être "R.drawable.+pictos01+" ? Sachant que R.drawable est une classe !!!

    Fort heureusement il existe une fonction: getIdentifier dans les ressources qui permettent d'aller chercher exactement cela: l'identificateur d'une ressource en fonction de son nom.

    La reflexion de Java permet aussi de le faire sans passer par cette fonction (avec des vérifications en moins sans doute)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    Par défaut
    oui tu as raison le "==" n'était pas bienvenu mais c'était pour faire vite car mon souci était surtout du coté du nom de l'image à appeler.
    L'habitude de l'asp sans doute ^^.

    Je vais regarder du cote de getIdentifer comme tu le conseilles mais j'ai peur qu'il y ait des soucis avec les ressources qu'il ne trouvera pas, ca ne risque pas d'arréter l'exécution?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    Par défaut
    pas de souci d'exécution ca fonctionne parfaitement pour ceux que cela interesse voila le code un peu remanié les variables ayant un autre nom ^^


    Grosso modo :
    - le nombre d'image c'est name8 qui peut être 0, 1, 2, 3 ou 4.
    - le nom de/des l'image/s voulue/s qui change/nt c'est pictos1 pictos2 pictos3 ou pictos4 dans le répertoire drawable (exemple pict198a.jpg )
    - et l'image par défaut en cas d'absence c'est pict00 pour l'image a, pict0b pour l'image b, pict0c pour la c et pict0d pour la d
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
      	  		int name8 = c.getInt(9);
     
    	String pictos1 = "pict"+c.getString(0)+"a";
    	String pictos2 = "pict"+c.getString(0)+"b";
    	String pictos3 = "pict"+c.getString(0)+"c";
    	String pictos4 = "pict"+c.getString(0)+"d";
     
    	switch (name8) {
    	  case 1:  
    		  int identifier = getResources().getIdentifier(pictos1, "drawable", getPackageName()); 
    		  ImageView image = (ImageView) findViewById(R.id.pict1); 
    		  pict1 .setImageResource(identifier); 
     
    		  pict2 .setImageResource(R.drawable.pict0b);
    		  pict3 .setImageResource(R.drawable.pict0c);
    		  pict4 .setImageResource(R.drawable.pict0d);
    	              break;
    	  case 2: 
    		  int identifier2 = getResources().getIdentifier(pictos1, "drawable", getPackageName()); 
    		  ImageView image1 = (ImageView) findViewById(R.id.pict1); 
    		  pict1 .setImageResource(identifier2);
     
    		  int identifier3 = getResources().getIdentifier(pictos2, "drawable", getPackageName()); 
    		  ImageView image2 = (ImageView) findViewById(R.id.pict2); 
    		  pict2 .setImageResource(identifier3);
     
    		  pict3 .setImageResource(R.drawable.pict0c);
    		  pict4 .setImageResource(R.drawable.pict0d);
    	              break;
    	  case 3:
    	      int identifier4 = getResources().getIdentifier(pictos1, "drawable", getPackageName()); 
    	      ImageView image3 = (ImageView) findViewById(R.id.pict1); 
    	      pict1 .setImageResource(identifier4);
     
    	      int identifier5 = getResources().getIdentifier(pictos2, "drawable", getPackageName()); 
    		  ImageView image4 = (ImageView) findViewById(R.id.pict2);
    		  pict2 .setImageResource(identifier5);
     
    		  int identifier6 = getResources().getIdentifier(pictos3, "drawable", getPackageName()); 
    		  ImageView image5 = (ImageView) findViewById(R.id.pict3);
    		  pict3 .setImageResource(identifier6);
     
    		  pict4 .setImageResource(R.drawable.pict0d);
    		  		break;
    	  case 4:
    		  int identifier7 = getResources().getIdentifier(pictos1, "drawable", getPackageName()); 
    	      ImageView image6 = (ImageView) findViewById(R.id.pict1); 
    	      pict1 .setImageResource(identifier7);
     
    	      int identifier8 = getResources().getIdentifier(pictos2, "drawable", getPackageName()); 
    	      ImageView image7 = (ImageView) findViewById(R.id.pict2); 
    	      pict2 .setImageResource(identifier8);
     
    	      int identifier9 = getResources().getIdentifier(pictos3, "drawable", getPackageName()); 
    		  ImageView image8 = (ImageView) findViewById(R.id.pict3);
    		  pict3 .setImageResource(identifier9);
     
    		  int identifier10 = getResources().getIdentifier(pictos4, "drawable", getPackageName()); 
    		  ImageView image9 = (ImageView) findViewById(R.id.pict4);
    		  pict4 .setImageResource(identifier10);
    		  break;
    	  default:  
            	 pict1 .setImageResource(R.drawable.pict00);
            	 pict2 .setImageResource(R.drawable.pict0b);
            	 pict3 .setImageResource(R.drawable.pict0c);
            	 pict4 .setImageResource(R.drawable.pict0d);
    	               break;
    	}
    voila ca fonctionne même si a l'air un peu lent ^^ il parait qu'avec la reflexion ca irait plus vite mais comme il n'y a que 4 images je n'ai pas bataillé !

    Juste un truc étrange les images sont plus espacées quand elles existent que lorsqu'elles n'existent pas, je n'ai pas vraiment compris pourquoi mais si quelqu'un sait comment conserver l'exacte mise en forme ca m'interesse.

  5. #5
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Juste un truc étrange les images sont plus espacées quand elles existent que lorsqu'elles n'existent pas, je n'ai pas vraiment compris pourquoi mais si quelqu'un sait comment conserver l'exacte mise en forme ca m'interesse.
    Tu devrais regarder cette propriété :
    android:scaleType

    https://developer.android.com/refere...html#scaleType
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

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

Discussions similaires

  1. insérer une variable dans le nom d'une variable
    Par leninelenine dans le forum Général Python
    Réponses: 11
    Dernier message: 28/05/2015, 08h25
  2. Réponses: 4
    Dernier message: 19/11/2014, 16h44
  3. Réponses: 9
    Dernier message: 08/05/2014, 16h09
  4. Réponses: 3
    Dernier message: 29/11/2011, 16h34
  5. Mettre une variable dans l'appel d'une variable de session
    Par PrinceMaster77 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2011, 10h12

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