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 :

Cibler une ressource "dynamiquement"


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut Cibler une ressource "dynamiquement"
    Bonjour,

    Dans l’application que je développe, à certains endroits, j'affiche une image en focntion d'un nombre.
    Le nom de l'image contenant aussi le nombre en question (ex: image1, image2...), ne serait-il pas possible de cibler la ressource sans l'aide d'un switch (comme ci-dessous) ?

    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
    	public static String gaugeRes(String nb)
    	{
    		int gauge = Double.valueOf(nb).intValue();
     
    		switch (gauge)
    		{
    			case 0:
    				return String.valueOf(R.drawable.gauge0);
     
    			case 1:
    				return String.valueOf(R.drawable.gauge1);
     
    			case 2:
    				return String.valueOf(R.drawable.gauge2);
     
    			case 3:
    				return String.valueOf(R.drawable.gauge3);
     
    			case 4:
    				return String.valueOf(R.drawable.gauge4);
     
    			case 5:
    				return String.valueOf(R.drawable.gauge5);
     
    			default:
    				return null;
    		}
    	}

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Un peu comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static String gaugeRes(String nb) {
      String mDrawableName = "gauge" + nb;
      int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
     
      return String.valueOf(resID);
    }
    ?
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Tout simplement, c'est bien plus efficace ^^

    Merci pour ta réponse rapide.

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static String gaugeRes(String nb) {
      String mDrawableName = "gauge" + nb;
      int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
     
      return String.valueOf(resID);
    }


    La methode getResources n'etant pas static car elle est liée à l'instance d'une activity , il ne peut pas être appélé dans une methode static....

    Je le fairai par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static String getGaugeId(Context context,String nb) {
      String mDrawableName = "gauge" + nb;
      int resID = context.getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
     
      return String.valueOf(resID);
    }
    Pour la convention pensons à donner des bon nom à nos methodes et variable. Le nom gaugeRes ne commençant pas par un verbe ne respecte pas JavaCode Convention:

    Pour plus d'informations sur les codes conventions et la securité du code :
    http://jahbromo.blogspot.fr/2012/04/...-securite.html

  5. #5
    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
    Enfin... si on est sur que la ressource est dans les ressources de l'application il y aussi le très rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static int gaugeRes(int nb) {
        String name =   "gauge" + Integer.toString(nb);
        return R.drawable.class.getDeclaredField(name).getInt(null);
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par jahbromo Voir le message
    La methode getResources n'etant pas static car elle est liée à l'instance d'une activity , il ne peut pas être appélé dans une methode static....

    -------------------------

    Pour la convention pensons à donner des bon nom à nos methodes et variable. Le nom gaugeRes ne commençant pas par un verbe ne respecte pas JavaCode Convention:

    Pour plus d'informations sur les codes conventions et la securité du code :
    http://jahbromo.blogspot.fr/2012/04/...-securite.html
    Oui, la méthode étant statique, j'avais déjà prévu de passer un Context en paramètre.
    Merci pour le lien sur les conventions et la sécurité du code, très intéressant.


    Citation Envoyé par nicroman Voir le message
    Enfin... si on est sur que la ressource est dans les ressources de l'application il y aussi le très rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static int gaugeRes(int nb) {
        String name =   "gauge" + Integer.toString(nb);
        return R.drawable.class.getDeclaredField(name).getInt(null);
    }
    Merci pour cette réponse aussi.
    Quand tu dis "le très rapide", tu entends par là "plus rapide à l’exécution" ou "plus rapide à écrire" ?

  7. #7
    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
    J'entends plus rapide à l’exécution....

    Il suffit de regarder le code de getIdentifier()....
    Cette fonction est parfaite quand on a un nom de ressource, et on ne sait pas ou elle se trouve (android, application, drawable, color, ...) parcequ'elle permet de récupérer n'importe quoi.

    Le petit bout de code que j'ai collé est plus limité, (lien direct avec la classe R.drawable par exemple), et n'ira chercher que les ressources de l'application. Mais par contre, il est lié à l'application, et n'a pas besoin de context du coup.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

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

Discussions similaires

  1. [VB]probleme double quote dans une ressource de type string
    Par JulienCEA dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/02/2006, 12h38
  2. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34

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