53 votes

Comment définir la source d'une ImageViews de manière programmatique dans Android ?

Je suis en train de créer un élément d'interface utilisateur composite qui prend un objet (un joueur) et je veux choisir l'image correspondante à l'équipe pour laquelle ce joueur joue (l'objet joueur a une valeur de chaîne pour son numéro d'image). J'ai les images dans le dossier des ressources de mon projet.

Comment puis-je spécifier la source correcte pour chaque joueur. Faut-il écrire un grand nombre de "if" et "els" (en vérifiant la valeur de la chaîne de caractères) et utiliser res.getDrawable(R.drawable.no1), etc. ou existe-t-il une solution plus élégante qui me permette d'utiliser une chaîne de caractères pour indiquer le chemin vers la source ?

95voto

Cristian Points 92147

Je mettrais la relation entre les chaînes et les images dans une carte :

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("blah", R.drawable.blah);
// etc...

Ensuite, vous pouvez utiliser le setImageResource(int) méthode :

ImageView image;
image.setImageResource(map.get("blah"));

Ou, si les chaînes ont le même nom que l'image (comme dans le cas précédent), vous pouvez charger la ressource en utilisant cette méthode : Android et obtention d'une vue dont l'identifiant est une chaîne de caractères

0 votes

Mince, tu m'as battu de 26 secondes :)

1 votes

@MohitDeshpande : hahahahahaha cela arrive tout le temps.

1 votes

Oui, ça marche très bien. J'ai oublié que R.etc retourne des ints :/ Merci !

34voto

Mohit Deshpande Points 9472

5voto

OGZCoder Points 140

Si je comprends bien, vous voulez afficher une ressource image à partir d'une chaîne de caractères. C'est ce que je fais dans une application où l'utilisateur peut choisir une image dans une ListPreference personnalisée et l'afficher dans le layout de MainActivity. L'ID de la ressource dessinable est stocké dans les SharedPreferences sous la forme d'une chaîne qui correspond à l'ID de la ressource dessinable (String) exemple : "@drawable/logo_image". Je tire la valeur de la ListPreference avec :

    SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE);
            String logo_id = (shared.getString("pref_logo",""));

Cela renvoie la ressource du dessinateur sous la forme d'une chaîne, c'est-à-dire @drawable/logo_image. Ensuite, pour insérer cette image dans ma mise en page, j'utilise :

    ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo);
    iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage"));

Cela changera la ressource ImageView pour la nouvelle drawable avec setImageResource() en utilisant l'int retourné par la méthode ci-dessous qui retourne un ID (int) à partir d'une chaîne représentant la ressource drawable dans com.yourpackage :

    getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")

Vous pouvez également utiliser cette même méthode pour modifier d'autres ressources qui utilisent drawable, comme les arrière-plans de mise en page, etc. Il suffit d'utiliser cette méthode pour obtenir l'ID sous forme d'un int :

    getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X