Jump to content

[RESOLU] Mettre une variable dans un getStringArray()


toma_50

Recommended Posts

Salut à tous,

Je bloque depuis plusieurs heure sur un problème.

Quand je récupère les items de mon spinner ( ils sont dans mon fichier xml avec comme nom "spinner_matiere"), je fais ceci :

List_matiere = getResources().getStringArray(R.array.spinner_matiere);

Seulement maintenant, je voudrais faire la même chose mais en remplaçant "spinner_matiere" par une variable de type String.

ex : List_matiere = getResources().getStringArray(R.array.variable);

Comment faire ?

merci

Link to comment
Share on other sites

Ce n'est pas possible (de manière simple). En Java, tu ne peux pas remplacer un identifiant (d'attribut, de variable, de méthode, ...) par le contenu d'une variable.

Ce serait possible de le faire, mais c'est plus complexe à mettre en oeuvre, en utilisant l'introspection. Mais est-ce que ça en vaut le coup ? La question étant : qu'est-ce que tu cherches à faire ?

Link to comment
Share on other sites

Merci pour la réponse.

En faite, j'ai une variable de type String qui prend le nom d'une de mes ressources et je voudrais que suivant ce nom,je puisse récupérer ce que contient cette ressource, pour mettre cela dans un tableau de String.

En espérant avoir était le plus clair possible ...

Link to comment
Share on other sites

Je comprends ce que tu veux faire, pas pourquoi tu veux le faire. N'as tu pas un autre moyen de récupérer ton choix ?

Néanmoins, si c'est ce que tu veux, tu peux donc utiliser l'introspection pour le faire.

Exemple d'un code qui récupère une valeur d'identifiant d'un composant graphique à partir de son nom. A adapter à ton cas (R.string au lieu de R.id), et faire une gestion des erreurs un peu plus sérieuse)

String maVariable = "textView1";
int id = 0;

Class<?> cl = R.id.class;
try {
 Field f = cl.getField(maVariable); 
 Object value = f.get(null);
 id = ((Integer)value).intValue();
} catch (NoSuchFieldException e) {
 // attribut non trouvé
 e.printStackTrace();
} catch (IllegalArgumentException e) {
 // Erreur récupération de la valeur
 e.printStackTrace();
} catch (IllegalAccessException e) {
 // Erreur récupération de la valeur
 e.printStackTrace();
}

TextView tv = (TextView)findViewById(id);
tv.setText("hello");

Link to comment
Share on other sites

Merci mais j'ai fini par trouver par un autre moyen. Voila ce que j'ai utilisé :

int ressource = getResources().getIdentifier( variable , "array",  "com.example.iut" );

String liste_matiere[] = getResources().getStringArray(ressource);

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...