type studio parser examples ejemplos absoluto java android xml

java - studio - Recurso de Android: matriz de matrices



weight in layout android (4)

Puedes casi hacer lo que quieras. Debe declarar cada matriz por separado y luego una matriz de referencias. Algo como esto:

<string-array name="array01"> <item name="id">1</item> <item name="title">item one</item> </string-array> <!-- etc. --> <array name="array0"> <item>@array/array01</item> <!-- etc. --> </array>

Luego, en tu código, haces algo como esto:

Resources res = getResources(); TypedArray ta = res.obtainTypedArray(R.array.array0); int n = ta.length(); String[][] array = new String[n][]; for (int i = 0; i < n; ++i) { int id = ta.getResourceId(i, 0); if (id > 0) { array[i] = res.getStringArray(id); } else { // something wrong with the XML } } ta.recycle(); // Important!

Estoy tratando de implementar una estructura de datos de recursos que incluye una matriz de matrices, específicamente cadenas. El problema que encuentro es cómo obtener los objetos de la matriz secundaria y sus valores específicos. Aquí está mi archivo de recursos ...

<resources> <array name="array0"> <item> <string-array name="array01"> <item name="id">1</item> <item name="title">item one</item> </string-array> </item> <item> <string-array name="array02"> <item name="id">2</item> <item name="title">item two</item> </string-array> </item> <item> <string-array name="array03"> <item name="id">3</item> <item name="title">item three</item> </string-array> </item> </array> </resources>

Luego, en mi código Java, recupero la matriz e intento acceder a los subelementos como ...

TypedArray typedArray = getResources().obtainTypedArray(R.array.array0); TypedValue typedValue = null; typedArray.getValue(0, typedValue);

En este punto, el objeto typedArray debería representar el conjunto de cadenas "array01", sin embargo, no veo cómo recuperar los elementos de cadena "id" y "title". Cualquier ayuda sería apreciada, gracias de antemano.


Una matriz no es un par nombre / valor. Solo puedes acceder a los elementos por número. La sintaxis en el xml es incorrecta. Debería ser de esa manera:

<string-array name="string_array_name"> <item>text_string1</item> <item>text_string2</item> </string-array>


de acuerdo con respuesta @Ted Hopp, de manera más elegante:

<integer-array name="id_array"> <item>1</item> <item>2</item> <item>3</item> </integer-array> <string-array name="name_array"> <item>name 1</item> <item>name 2</item> <item>name 3</item> </string-array> <array name="array0"> <item>@array/id_array</item> <item>@array/name_array</item> </array>

asegúrese de que el recuento de filas de sub matrices sea idéntico.
¡disfruta escribiendo código para acceder a las celdas de la matriz!
Android todavía es un niño mientras se mantiene la fea etiqueta de "elemento" de TypedArray "array0".
en mi opinión, el más flexible debería ser:

<array name="array0"> <integer-array name="id_array"> <item>1</item> <item>2</item> <item>3</item> </integer-array> <string-array name="name_array"> <item>name 1</item> <item>name 2</item> <item>name 3</item> </string-array> </array>

pero no hagas eso porque esa no es la forma de Android :)


https://developer.android.com/guide/topics/resources/more-resources.html#Color

<?xml version="1.0" encoding="utf-8"?> <resources> <array name="icons"> <item>@drawable/home</item> <item>@drawable/settings</item> <item>@drawable/logout</item> </array> <array name="colors"> <item>#FFFF0000</item> <item>#FF00FF00</item> <item>#FF0000FF</item> </array> </resources>

Este código de aplicación recupera cada matriz y luego obtiene la primera entrada en cada matriz:

Resources res = getResources(); TypedArray icons = res.obtainTypedArray(R.array.icons); Drawable drawable = icons.getDrawable(0); TypedArray colors = res.obtainTypedArray(R.array.colors); int color = colors.getColor(0,0);