Référencement d’une chaîne dans une ressource de tableau de chaînes avec xml

J’ai des préférences où vous pouvez activer / désactiver les éléments qui apparaîtront dans le menu. Il y a 17 articles. J’ai créé un tableau de chaînes dans values ​​/ arrays.xml avec des titres pour chacun de ces 17 éléments.

J’ai preferences.xml qui a la disposition pour mon fichier de préférences, et je voudrais référencer un seul élément du tableau de chaînes à utiliser comme titre.

Comment puis-je faire ceci?

Dans la référence de développeur Android, je vois comment je peux référencer une chaîne unique avec XML, mais pas comment je peux référencer une chaîne à partir d’une ressource de tableau en XML.

En bref: je ne pense pas que vous le pouvez, mais il semble y avoir une solution de contournement:.

Si vous consultez la ressource Android ici:

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

Vous voyez que sous la section tableau (tableau de chaînes, au moins), la “référence de ressources” (à partir d’un fichier XML) ne spécifie aucun moyen de traiter les éléments individuels. Vous pouvez même essayer dans votre XML d’utiliser “@ array / yourarrayhere”. Je sais qu’au moment de la conception, vous obtiendrez le premier article. Mais ce n’est pas pratique si vous voulez utiliser, disons … le second, bien sûr.

Cependant, il existe un truc que vous pouvez faire. Vois ici:

Référencement d’une chaîne XML dans un tableau XML (Android)

Vous pouvez “sortingcher” (pas vraiment) la définition du tableau en adressant des chaînes indépendantes à l’intérieur de la définition du tableau. Par exemple, dans votre ssortingngs.xml:

Earth Moon  @ssortingng/earth @ssortingng/moon  

En utilisant ceci, vous pouvez utiliser “@ ssortingng / earth” et “@ ssortingng / moon” normalement dans vos champs XML “android: text” et “android: title”, mais vous ne perdrez pas la possibilité d’utiliser le tableau définition pour les buts que vous vouliez en premier lieu.

Semble travailler ici sur mon Eclipse. Pourquoi n’essayez-vous pas de nous dire si cela fonctionne? 🙂

Peut-être que cela aiderait:

 Ssortingng[] some_array = getResources().getSsortingngArray(R.array.your_ssortingng_array) 

Donc, vous obtenez la liste de tableaux en tant que Ssortingng [] et choisissez n’importe quel i, some_array [i].

La meilleure option serait d’utiliser simplement le tableau renvoyé comme un tableau, ce qui signifie:

getResources().getSsortingngArray(R.array.your_array)[position]

Ceci est une approche rapide des approches mentionnées ci-dessus, mais fait le travail de la manière que vous voulez. Sinon, Android ne fournit pas d’indexation XML directe pour les tableaux basés sur XML.

Malheureusement:

  • Il semble que vous ne puissiez pas référencer un seul élément d’un tableau dans values ​​/ arrays.xml avec XML. Bien sûr, vous pouvez en Java, mais pas XML. Il n’ya pas d’information à ce sujet dans la référence du développeur Android, et je n’en ai trouvé nulle part ailleurs.

  • Il semble que vous ne puissiez pas utiliser un tableau comme clé dans la présentation des préférences. Chaque clé doit être une valeur unique avec son propre nom de clé.

Ce que je veux accomplir: Je veux pouvoir parcourir les 17 préférences, vérifier si l’élément est vérifié et, le cas échéant, charger la chaîne du tableau de chaînes pour ce nom de préférence.

Voici le code que j’espérais compléter cette tâche:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); ArrayAdapter itemsArrayList = new ArrayAdapter(getBaseContext(), android.R.layout.simple_list_item_1); Ssortingng[] itemNames = getResources().getSsortingngArray(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:

  • Je mets une seule chaîne pour chacun des éléments et référencé les chaînes simples dans le fichier. J'utilise la référence de chaîne unique pour les titres de la case à cocher de disposition des préférences et le tableau de ma boucle.

  • Pour parcourir les préférences, j'ai simplement nommé les clés comme key1, key2, key3, etc. Comme vous référencez une clé avec une chaîne, vous avez la possibilité de "créer" 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]); } } 

Une autre façon de le faire est de définir un tableau de ressources dans ssortingngs.xml comme ci-dessous.

      ]> 

puis en définissant un tableau de chaînes en utilisant les ressources ci-dessus

  &supportDefaultSelection; &issueOption1; &issueOption2; &issueOption3;  

Vous pouvez également renvoyer la même chaîne dans d’autres fichiers XML, tout en maintenant DRY intact. L’avantage que je vois est qu’avec un seul changement de valeur, cela affecterait toutes les références du code.