288 votes

Android - référence à une chaîne dans un tableau de chaînes de ressource avec xml

J'ai été incapable de trouver une solution pour cela.

Ce que je suis en train de faire: j'ai des préférences où vous pouvez activer/désactiver ce que les articles seront affichés sur le menu. Il y a 17 éléments. J'ai fait un tableau de chaînes de values/arrays.xml avec des titres pour chacun de ces 17 éléments.

J'ai preferences.xml qui a la mise en page de mon fichier de préférences, et je voudrais faire référence à un seul élément de la chaîne de tableau à utiliser comme titre.

Comment, si c'est possible, puis-je faire cela?

Dans le Android de référence du développeur, je vois comment je peut faire référence à une seule chaîne avec le XML, mais maintenant, comment je peut faire référence à une chaîne de caractères à partir d'un tableau des ressources en XML.

Merci

371voto

David Cesarino Points 7258

En bref: je ne pense pas que vous pouvez, mais il semble être une solution de contournement:.

Si vous prenez un coup d'oeil dans le Android de Ressources ici:

http://developer.android.com/guide/topics/resources/string-resource.html

Vous voyez que dans le tableau de la section (tableau de chaîne, au moins), la "RÉFÉRENCE de la RESSOURCE" (que vous obtenez à partir d'un fichier XML) ne précise pas la manière d'aborder les éléments individuels. Vous pouvez même l'essayer dans votre XML à utiliser "@tableau/yourarrayhere". Je sais qu'au moment de la conception, vous obtiendrez le premier élément. Mais c'est d'aucune utilité si vous souhaitez l'utiliser, disons... la deuxième, bien sûr.

CEPENDANT, il y a un truc que vous pouvez faire. Voir ici:

La référence à une chaîne XML dans un document XML en Tableau (Android)

Vous pouvez "tricher" (pas vraiment) la définition de tableau en s'attaquant indépendant des chaînes à l'INTÉRIEUR de la définition de la matrice. Par exemple, dans votre strings.xml:

<string name="earth">Earth</string>
<string name="moon">Moon</string>

<string-array name="system">
    <item>@string/earth</item>
    <item>@string/moon</item>
</string-array>

En utilisant cela, vous pouvez utiliser "@string/terre" et "@string/lune" normalement dans votre "android:text" et "android:title" champs XML, et pourtant, vous ne perdrez pas la possibilité d'utiliser la définition de tableau pour quelles fins il est destiné en premier lieu.

Semble fonctionner ici sur mon Eclipse. Pourquoi ne pas essayer et nous dire si cela fonctionne? :-)

251voto

Caveman Points 3432

Peut-être que cela aiderait:

String[] some_array = getResources().getStringArray(R.array.your_string_array)

Ainsi, vous obtenez le tableau-liste comme une Chaîne de caractères [], puis choisissez tout i, some_array[i].

11voto

Jorsher Points 590

Malheureusement:

  • Il semble que vous ne pouvez pas faire référence à un élément unique à partir d'un tableau dans values/arrays.xml avec XML. Bien sûr, vous pouvez en Java, mais pas le XML. Il n'y a pas d'information sur le faire dans le Android de référence du développeur, et je ne pouvais pas trouver tout n'importe où ailleurs.

  • Il semble que vous ne pouvez pas utiliser un tableau comme un élément clé dans les préférences de mise en page. Chaque clé est d'être une valeur unique avec son propre nom de la clé.

Ce que je veux accomplir: Je veux être en mesure de boucle à travers les 17 préférences, vérifier si l'élément est coché, et si elle l'est, charge de la chaîne à partir du tableau de chaîne pour que la préférence de nom.

Voici le code que j'espérais serait la fin de cette tâche:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());  
ArrayAdapter<String> itemsArrayList = new ArrayAdapter<String>(getBaseContext(),   android.R.layout.simple_list_item_1);  
String[] itemNames = getResources().getStringArray(R.array.itemNames_array);  


for (int i = 0; i < 16; i++) {  
    if (prefs.getBoolean("itemKey[i]", true)) {  
        itemsArrayList.add(itemNames[i]);  
    }  
} 

Ce que j'ai fait:

  • J'ai mis une chaîne unique pour chacun des articles, et fait référence à l'unique chaînes dans le . J'utilise la chaîne unique de référence pour les préférences de mise en page case les titres, et le tableau de ma boucle.

  • Pour faire une boucle dans les préférences, j'ai nommé les touches comme key1, key2, clé3, etc. Puisque vous faites référence à une clé avec une chaîne, vous avez la possibilité de "construire" le nom de la clé lors de l'exécution.

Voici le nouveau code:

for (int i = 0; i < 16; i++) {  
        if (prefs.getBoolean("itemKey" + String.valueOf(i), true)) {  
        itemsArrayList.add(itemNames[i]);  
    }  
}

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