studio resource obtener array android xml reference preferences arrays

resource - string value android



Hacer referencia a una cadena en un recurso de matriz de cadenas con xml (5)

Desafortunadamente:

  • Parece que no puede hacer referencia a un solo elemento de una matriz en los valores / arrays.xml con XML. Por supuesto que puedes en Java, pero no en XML. No hay información sobre cómo hacerlo en la referencia del desarrollador de Android, y no pude encontrar ninguna otra parte.

  • Parece que no puede usar una matriz como clave en el diseño de preferencias. Cada clave debe ser un valor único con su propio nombre de clave.

Lo que quiero lograr: quiero poder recorrer las 17 preferencias, verificar si el elemento está marcado y, si lo está, cargar la cadena desde la matriz de cadenas para ese nombre de preferencia.

Aquí está el código que esperaba para completar esta tarea:

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]); } }

Lo que hice:

  • Establecí una sola cadena para cada uno de los elementos, y hice referencia a las cadenas individuales en el. Uso la referencia de una sola cadena para los títulos de las casillas de verificación de diseño de preferencias y la matriz de mi bucle.

  • Para recorrer las preferencias, simplemente nombré las claves como key1, key2, key3, etc. Como usted hace referencia a una clave con una cadena, tiene la opción de "construir" el nombre de la clave en tiempo de ejecución.

Aquí está el nuevo código:

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

Tengo preferencias donde puede habilitar / deshabilitar qué elementos aparecerán en el menú. Hay 17 artículos. Hice una matriz de cadenas en values ​​/ arrays.xml con títulos para cada uno de estos 17 elementos.

Tengo preferences.xml que tiene el diseño de mi archivo de preferencias, y me gustaría hacer referencia a un solo elemento de la matriz de cadenas para usar como título.

¿Cómo puedo hacer esto?

En la referencia para desarrolladores de Android, veo cómo puedo hacer referencia a una sola cadena con XML, pero no cómo puedo hacer referencia a una cadena desde un recurso de matriz en XML.


En resumen: no creo que puedas, pero parece haber una solución:.

Si echas un vistazo al recurso de Android aquí:

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

Verá que en la sección de matriz (matriz de cadena, al menos), la "REFERENCIA DE RECURSOS" (como se obtiene de un XML) no especifica una forma de abordar los elementos individuales. Incluso puedes probar en tu XML para usar "@ array / yourarrayhere". Sé que en tiempo de diseño obtendrás el primer artículo. Pero eso no tiene ningún uso práctico si quiere usar, digamos ... el segundo, por supuesto.

SIN EMBARGO, hay un truco que puedes hacer. Mira aquí:

Referencia a una cadena XML en una matriz XML (Android)

Puede "engañar" (no realmente) la definición de la matriz dirigiendo cadenas independientes DENTRO de la definición de la matriz. Por ejemplo, en tus cadenas.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>

Al usar esto, puede usar "@ string / earth" y "@ string / moon" normalmente en los campos XML de "android: text" y "android: title", y sin embargo, no perderá la capacidad de usar la matriz Definición para cualquier propósito que pretendías en primer lugar.

Parece trabajar aquí en mi Eclipse. ¿Por qué no intentas decirnos si funciona? :-)


La mejor opción sería usar la matriz de retorno de recursos como una matriz, lo que significa:

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

Este es un método abreviado de los enfoques mencionados anteriormente, pero realiza el trabajo de la manera que desee. De lo contrario, Android no proporciona indexación XML directa para arreglos basados ​​en xml.


Otra forma de hacerlo es definir una matriz de recursos en strings.xml como a continuación.

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE resources [ <!ENTITY supportDefaultSelection "Choose your issue"> <!ENTITY issueOption1 "Support"> <!ENTITY issueOption2 "Feedback"> <!ENTITY issueOption3 "Help"> ]>

y luego definir una matriz de cadenas utilizando los recursos anteriores

<string-array name="support_issues_array"> <item>&supportDefaultSelection;</item> <item>&issueOption1;</item> <item>&issueOption2;</item> <item>&issueOption3;</item> </string-array>

También puedes referir la misma cadena a otros xmls manteniendo DRY intacto. La ventaja que veo es que, con un solo cambio de valor, afectaría a todas las referencias en el código.


Tal vez esto ayudaría

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

Así que obtienes la lista de matrices como una Cadena [] y luego eliges cualquier i, some_array [i].